使用递归函数(c++)将长字符串转换为整数时输出错误
Wrong output in converting long strings to integer using recursive function(c++)
int stringToInt(string str)
{
if (str.length() == 1){
return (str[0] - '0');
}
double y = stringToInt(str.substr(1));
double x = str[0] - '0';
x = x * pow(10, str.length() - 1) + y;
return int(x);
}
int main(){
string s1= "12345";
string s2= "123456789101";
cout<<"s1"<<stringToInt(s1)<<endl;
cout<<"s2"<<stringToInt(s2)<<endl;
}
s1 的正确输出= 12345。
但是对于 s2= "123456789101",它给出了错误的输出。(负数!!!)
谁能告诉我出了什么问题?
如何使用递归函数将长字符串转换为整数?
简单回答:
123456789101 > 2147483647 = INT_MAX
(= int
类型变量的最大值)。
因此您的函数在过程中的某个时刻绑定到 return 一个不正确的值。
将 int
替换为 long long
(甚至 unsigned long long
),它可能适用于此特定输入(取决于您的平台)。
int stringToInt(string str)
{
if (str.length() == 1){
return (str[0] - '0');
}
double y = stringToInt(str.substr(1));
double x = str[0] - '0';
x = x * pow(10, str.length() - 1) + y;
return int(x);
}
int main(){
string s1= "12345";
string s2= "123456789101";
cout<<"s1"<<stringToInt(s1)<<endl;
cout<<"s2"<<stringToInt(s2)<<endl;
}
s1 的正确输出= 12345。
但是对于 s2= "123456789101",它给出了错误的输出。(负数!!!)
谁能告诉我出了什么问题?
如何使用递归函数将长字符串转换为整数?
简单回答:
123456789101 > 2147483647 = INT_MAX
(= int
类型变量的最大值)。
因此您的函数在过程中的某个时刻绑定到 return 一个不正确的值。
将 int
替换为 long long
(甚至 unsigned long long
),它可能适用于此特定输入(取决于您的平台)。