這是給定的代碼。我正在訪問字串中的每個元素,并試圖將其與8的冪相乘,但是,結果是錯誤的。
#include<iostream>
#include<algorithm>/span>
#include<math.h>/span>
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()
{
字串s。
cin>>s。
cout<<od(s)。
return 0。
uj5u.com熱心網友回復:
問題出在這行:
ans=ans s[i]*pow(8,i) 。
這里的s[i]是一個字符。當對它進行數字運算時,它的ASCII值被取走。所以這里有一個簡單的解決方法:
ans=ans ((s[i]-'0'))*pow(8, i) 。
這將給你正確的答案,原因顯而易見。
uj5u.com熱心網友回復:
這段代碼就是問題所在
ans=ans s[i]*pow(8,i)。
字串字符(chars)是ASCII的,所以ASCII中的 "0 "實際上是48。ASCII的映射在這里 https://en.cppreference.com/w/cpp/language/ascii
我想你可以檢查每個字符并將其映射到十進制值,或者你可以使用類似std::stoi的東西
。std::stoi(myoctalstring, nullptr, 8) 。
https://en.cppreference.com/w/cpp/string/basic_string/stol
CodePudding
有兩個問題:字串的元素是數字,而不是數字('0'與0不是一回事),并且pow是一個浮點運算,你不應該與整數一起使用。
你可以通過減去'0'來獲得一個數字所對應的數字,并且你可以在回圈程序中跟蹤當前的8次方。
int od(string s)
{
reverse(s.begin(), s.end() 。)
int ans = 0;
int power = 1;
for(int i = 0; i < s.length() ; i )
{
ans = ans (s[i] - '0/span>) * power;
power *= 8;
}
return ans;
}
但實際上更簡單的做法是不對字串進行反轉,而是在每一步上對臨時結果進行乘法運算:
int od(string s)
{
int ans = 0;
for(int i = 0; i < s.length() ; i )
{
ans = ans * 8 s[i] - '0'/span>;
}
return ans。
}
uj5u.com熱心網友回復:
你需要使用atoi或_ttoi,類似于atoi(s[i])。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307844.html
標籤:
上一篇:如何在Haskell中制作一個開始/結束索引的串列?
下一篇:使用通配符的Bash字串格式比較
