C++以字符串为输入将八进制转十进制结果错误如何解决
八进制转十进制代码错误原因及修复方案
核心问题点
你的代码存在两处关键错误导致输出结果不符合预期:
- 未将字符转换为对应数值:你直接使用
s[i]参与运算,这里的s[i]是char类型,存储的是字符的ASCII码值,比如字符'1'的ASCII码是49,直接运算会用49而非数值1计算,导致结果完全错误。需要改为s[i] - '0'获取字符对应的整数值。 - 浮点数精度误差:
pow()是数学库提供的浮点数运算函数,计算整数次幂时可能出现精度丢失问题,比如pow(8,3)理论值为512,但实际运行时可能返回511.9999999999999,强制转为int后会被截断为511,导致结果偏差。计算整数次幂建议直接用整数乘法实现,避免精度问题。
修复后的代码(保留原逆序逻辑)
#include<iostream> #include<algorithm> using namespace std; int od(string s) { reverse(s.begin(),s.end()); int ans=0; int power = 1; // 用整数存储8的次幂,初始为8^0=1 for(int i=0;i<s.length();i++) { ans += (s[i] - '0') * power; power *= 8; } return ans; } int main() { string s; cin >> s; cout << od(s); return 0; }
更优实现(无需逆序)
不需要对字符串做逆序操作,正序遍历即可完成转换,代码更简洁高效:
#include<iostream> #include<string> using namespace std; int oct2dec(string s) { int ans = 0; for(char c : s) { ans = ans * 8 + (c - '0'); } return ans; } int main() { string s; cin >> s; cout << oct2dec(s); return 0; }
内容的提问来源于stack exchange,提问作者Parth Yadav
相关产品推荐
相关产品推荐

