题目描述
进制转换在计算机信息处理中应用很广, 鱼大大想要做好一个程序员,就得了解并熟悉进制转换,这对于鱼大大来说是非常重要的。
如今的计算机常见的进制有2进制、8进制、10进制、16进制。鱼大大也已经熟练的掌握了这几个进制之间的转换。不过很有远见的鱼大大认为,不久以后32进制也一定会变成一个常见的进制,不如现在就把他掌握好。
鱼大大知道计算机底层语言是二进制的0/1。于是他决定首先就要学会2进制和32进制的互相转换。现在需要你帮忙将一个2进制数变成32进制数,方便鱼大大学习记忆。
输入格式
一行一个首位为1的2进制数字
输出格式
一行一个32进制数字。(10~31分别用A~V表示)
样例
Input 1
101011101110000111111
Output 1
1BN1V
数据范围
对于40%的数据,输入2进制数字位数<30
对于60%的数据,输入2进制数字位数<60
对于100%的数据,输入2进制数字位数<150
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
#include<climits>
#include<cstring>
#include<string>
#include<algorithm>
#include<functional>
#include<list>
using namespace std;
char a[160];//n-ary number
long long b[160];//m-ary number
long long ans=0;
int main(){
cin>>a;
for(int i=0;i<strlen(a);i++){
long long num;
if(a[i]>='0'&&a[i]<='9'){
num=a[i]-'0';
}
else{
num=a[i]-'A'+10;
}
ans=ans*2+num;//ans is the DEC form of a;
}
int i=1;
while(ans!=0){
b[i]=ans%32;
ans=ans/32;
i++;
}
i=i-1;
for(int j=i;j>=1;j--){
if(b[j]>=0&&b[j]<=9){
cout<<b[j];
}
else{
char s;
s=55+b[j];
cout<<s;
}
}
return 0;
}
这一道题只得了65分,估计是因为超出了long long的范围了,请问该怎么改?