首页 > 解决方案 > 我正在尝试使用字符串作为输入将八进制数转换为十进制数,但答案是错误的

问题描述

这是给定的代码。我正在访问字符串的每个元素并尝试将其乘以 8 的幂,但是结果是错误的。

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;

int od(string s)
{
    reverse(s.begin(),s.end());
    
    int ans=0;
    
    for(int i=0;i<s.length();i++)
    {
        ans=ans+s[i]*pow(8,i);
    }
    
    return ans;
}

int main()
{
    string s;
    cin>>s;
    
    cout<<od(s);
    
    return 0;
}

标签: c++stringoctal

解决方案


问题在于:

 ans=ans+s[i]*pow(8,i);

这里 s[i] 是一个字符。当用它进行数值运算时,它的 ASCII 值被采用。所以这里有一个简单的解决方法:

 ans=ans+((s[i]-'0'))*pow(8,i);

出于显而易见的原因,这将为您提供正确的答案。


推荐阅读