屁孩君yeah 2022-10-20 12:17 采纳率: 100%
浏览 56
已结题

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

有一个测试点错求修改!

img

请将一个不超过 100100 位的二进制数转换为十六进制数!

输入
一个不超过 100100 位的二进制整数。

输出
该数对应的十六进制数。

样例
输入
11001001111011111000001000010011
输出
C9EF8213

#include<bits/stdc++.h>
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<<endl;
        return 0; 
    }
    s="";
    char a;
    while(num!=0)
    {    
        a=b[num%16];
        s=a+s;
        num/=16;
    }
    cout<<s<<endl;
    return 0;
}

  • 写回答

1条回答 默认 最新

  • codeaftercode 2022-10-20 13:33
    关注

    大数操作,要注意变量的取值范围。
    第10行,num+=pow(2,s.size()-i-1);这里有问题,如果输入的二进制整数的位数很大,这里的pow函数结果就溢出了。
    二进制转十六进制,不需要将整个数都算出来再做转换,可以从低位开始,每4位一组转换成一个十六进制数字,明白吧?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 已采纳回答 10月20日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么