1294 - 【基础】二进制转十六进制//c++

有一个测试点错求修改!

img

请将一个不超过 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位一组转换成一个十六进制数字,明白吧?