You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2-9进制转十进制C++程序运行结果异常求排查

问题定位

  • 核心问题1:convert函数每次取最高位运算后,没有移除已经计算过的最高位,导致后续位的取值完全错误。以你输入的10110为例,第一轮取到最高位1后,下一轮应该用剩余的0110继续运算,但原代码始终用原始的10110计算,导致第二位取到的是10而非0,最终数值完全偏离预期。
  • 核心问题2:使用<cmath>中的pow函数做整数幂运算,pow是浮点数实现,存在精度误差,计算结果转int时可能出现截断错误,比如pow(10,4)可能返回9999.9999999,转int后变成9999,进一步放大运算错误。

修复方案

  1. 调整计算逻辑,从最低位开始逐位计算,避免提前计算数字长度、反复做幂运算的冗余操作
  2. 替换浮点数pow调用,改用整数乘法实现权重递增,完全规避精度问题
  3. 每次计算完一位后移除已计算的位,保证后续位取值正确

修复后可正常运行的代码

#include <iostream>
using namespace std;

int convert(int num, int b) 
{
    int sum = 0;
    int weight = 1; // 初始为最低位权重b^0=1
    while(num > 0)
    {
        int digit = num % 10; // 取当前最低位
        sum += digit * weight;
        weight *= b; // 权重升级为下一位的b^n
        num /= 10; // 移除已计算的最低位
    }
    return sum;
}

int main()
{
    int num;
    cout << "Enter a number to convert: ";
    cin >> num;

    int b;
    cout << "Enter the base of number: ";
    cin >> b;

    int sum = convert(num, b);
    cout << "Its decimal value is: "<< sum << endl;
    return 0;
}

测试你的输入用例:输入10110、进制2,输出结果为22,符合二进制转十进制的正确结果。

内容的提问来源于stack exchange,提问作者Yonghyeon Shin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:45:04