我想将字符串转换为整数,然后发现“ 454”被转换为453。
我已经定义了一个函数,可以将整数字符串转换为整数。但是当我测试它时,发现“ 454”被转换为453。我尝试了另一个数字565,它是正确的。
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
int strtonum(string num){
int i = 0;
int n = 0;
int result=0;
for(i = num.length()-1; i>=0; i--,n++){
if(num[i] == '-'){
result-=2*result;
break;
}
cout<<result<<" + "<<(num[i] - '0')*pow(10,n);
result += (num[i] - '0')*pow(10,n);
cout<<" = "<<result<<endl;
}
return result;
}
int main()
{
string x;
cin>>x;
cout<<strtonum(x)<<endl;
return 0;
}
454
0 + 4 = 4
4 + 50 = 54
54 + 400 = 453
453
Process returned 0 (0x0) execution time : 2.763 s
Press any key to continue.
565
0 + 5 = 5
5 + 60 = 65
65 + 500 = 565
565
Process returned 0 (0x0) execution time : 3.314 s
Press any key to continue.
答案 0 :(得分:1)
您的方法涉及通过使用std::pow
函数来进行浮点计算。
您可能知道,浮点计算会引入错误。看到这里有很好的健康整数,我感到有些惊讶,但是在截断到int
之前,您仍然根本不处理它。
我建议将整数提高为10(也许是一个不错的循环!)。
而且,正如布鲁诺指出的那样:
result-=2*result;
容易溢出,因此只需执行以下操作即可:
result = -result;
或:
result *= -1;
答案 1 :(得分:0)
通常的方法是通过乘以10来累加值:
int convert(std::string text) {
bool negative = false;
int cur = 0;
if (text[cur] == '-') {
negative = true;
++cur;
}
int value = 0;
while (cur < text.length()) {
value *= 10;
value += text[cur++] - '0';
}
if (negative)
value = -value;
return value;
}
注意:此代码尚未经过测试。它可能包含错误。