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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:54:02