2-9进制转十进制C++程序运行结果异常求排查
问题定位
- 核心问题1:
convert函数每次取最高位运算后,没有移除已经计算过的最高位,导致后续位的取值完全错误。以你输入的10110为例,第一轮取到最高位1后,下一轮应该用剩余的0110继续运算,但原代码始终用原始的10110计算,导致第二位取到的是10而非0,最终数值完全偏离预期。 - 核心问题2:使用
<cmath>中的pow函数做整数幂运算,pow是浮点数实现,存在精度误差,计算结果转int时可能出现截断错误,比如pow(10,4)可能返回9999.9999999,转int后变成9999,进一步放大运算错误。
修复方案
- 调整计算逻辑,从最低位开始逐位计算,避免提前计算数字长度、反复做幂运算的冗余操作
- 替换浮点数
pow调用,改用整数乘法实现权重递增,完全规避精度问题 - 每次计算完一位后移除已计算的位,保证后续位取值正确
修复后可正常运行的代码
#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
相关产品推荐
相关产品推荐

