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

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 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化