使用递归函数(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),它可能适用于此特定输入(取决于您的平台)。