【问题标题】:Wrong output in converting long strings to integer using recursive function(c++)使用递归函数将长字符串转换为整数时输出错误(c++)
【发布时间】:2020-02-16 04:25:10
【问题描述】:
    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",它给出了错误的输出。(负数!!!) 谁能告诉我出了什么问题? 如何使用递归函数将长字符串转换为整数?

【问题讨论】:

  • 谢谢,如何将长字符串正确转换为整数?
  • 你不能。此数字太大,无法放入 32 位整数。您需要使用 64 位整数。
  • 同样使用 double 可能会导致您遇到大数字问题。有 64 位整数,double 精度不够。

标签: c++ string recursion int


【解决方案1】:

简单回答:

123456789101 &gt; 2147483647 = INT_MAX(=int 类型变量的最大值)。

所以你的函数必然会在某些时候返回一个不正确的值。

int 替换为long long(甚至unsigned long long),它可能对这个特定的输入正常工作(取决于你的平台)。

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2014-12-03
    • 2015-11-27
    • 2020-08-21
    • 2017-07-11
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多