c++ - 我正在尝试使用字符串作为输入将八进制数转换为十进制数,但答案是错误的
问题描述
这是给定的代码。我正在访问字符串的每个元素并尝试将其乘以 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;
}
解决方案
问题在于:
ans=ans+s[i]*pow(8,i);
这里 s[i] 是一个字符。当用它进行数值运算时,它的 ASCII 值被采用。所以这里有一个简单的解决方法:
ans=ans+((s[i]-'0'))*pow(8,i);
出于显而易见的原因,这将为您提供正确的答案。
推荐阅读
- python - 根据两个数字之和从输出中删除重复项
- javascript - 名称是必需的 Nodejs API
- sql - 确保只有表中的现有用户可以在 PostgreSQL 中添加记录
- javascript - 如何为我的网页制作标题 [HTML5 , CSS3]
- javascript - 无需在 javascript 中四舍五入即可获得短关注者数量
- constants - 如何使用 laravel 将常量的值写入另一个变量
- rust - 无法推断异步方法的生命周期
- firebase - 需要更改包名吗?
- mysql - 是什么原因造成的,当数值大于一定位数时,结果会不一样?
- javascript - 如何将 app.module.ts 中定义的 ngModules 用于延迟加载的组件?