有一个测试点错求修改!
请将一个不超过 100100 位的二进制数转换为十六进制数!
输入
一个不超过 100100 位的二进制整数。
输出
该数对应的十六进制数。
样例
输入
11001001111011111000001000010011
输出
C9EF8213
#include
using namespace std;
int main()
{
string s;
char b[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ;
cin>>s ;
long long i=s.size()-1,num=0;
while(i>=0){
if(s[i]=='1')num+=pow(2,s.size()-i-1);
i--;
}
if(num==0){
cout<<0<return 0;
}
s="";
char a;
while(num!=0)
{
a=b[num%16];
s=a+s;
num/=16;
}
cout<return 0;
}
大数操作,要注意变量的取值范围。
第10行,num+=pow(2,s.size()-i-1);这里有问题,如果输入的二进制整数的位数很大,这里的pow函数结果就溢出了。
二进制转十六进制,不需要将整个数都算出来再做转换,可以从低位开始,每4位一组转换成一个十六进制数字,明白吧?