『啦啦啦』~~~ 2024-04-18 16:20 采纳率: 42.9%
浏览 1
已结题

二进制转化为十进制哪错了

img


二进制转化为十进制有一部分测试点错了,但是不知道为什么,二进制总的不超过31位

  • 写回答

6条回答 默认 最新

  • 关注

    long long类型的最大值是9,223,372,036,854,775,807,长度最大只有19位,但是你的题目测试数据长度最大是31位,当测试样例的长度超过19位时,会超出long long 类型能读取的数据范围,会导致读取数据失败。
    修改方法是二进制用字符数组读取,不要使用long long读取。
    代码修改如下:

    #include <stdio.h>
    #include <string.h>
    int main() {
        char a[32] = { 0 };  //用来读取数据
        int n, j, k; //二进制最大长度不超过31位,所以不会超过int类型范围,用int类型即可
        int i;
        int count = 0;
        int sum = 0; //保存十进制数
        scanf("%s", a); //读取二进制
        count = strlen(a); //获取二进制长度
        //从低位遍历二进制
        k = 0; //计算幂次
        n = 1; //幂次
        for (i = count - 1; i >= 0; i--) {
            if (k == 0)  //这部分就是计算幂次,用pow函数也行
                n = 1;
            else
                n = n * 2;
            sum += (a[i] - '0') * n;
            k++;
        }
        printf("%d", sum);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 已采纳回答 4月18日
  • 创建了问题 4月18日