【问题标题】:I can't figure out what's going wrong when I try to add 2 big strings当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
【发布时间】:2020-07-10 02:25:42
【问题描述】:

我通过在 c++ 中使用大整数库尝试了这个问题,它工作得很好,当我尝试一次使用两个字符串中的一个整数来做这个时

我得到一个运行时错误,我尝试通过在代码中包含 cout 语句来调试它,但一切似乎都很好。

 string addStrings(string num1, string num2) {
        string res="";
        int n=num1.size();
        int m=num2.size();
        int carry=0;
        int j;
        for(int i=n-1,j=m-1;i>=0 || j>=0;i--,
            j--){
            int a;
            if(i>=0){
                a=((int)(num1[i])-48);
            }
            else {
                a=0;
            }
            int b; 
            if(j>=0){
                b=((int)(num2[j])-48);
            }
            else{
                b=0;
            }
            cout<<num1[i]<<" "<<num2[i]<<endl;
            cout<<a<<" "<<b<<endl;
            int sum=carry+a+b;
            int u=sum%10;
            res+=u;
            carry=sum/10;
        }
        res+=carry;
        cout<<res<<endl;
        reverse(res.begin(),res.end());
      
    return res;
    }

【问题讨论】:

    标签: c++ string addition


    【解决方案1】:

    您在程序中声明了一个名为resstd::string,您希望从您的函数中返回它。在这一行之前一切正常:

    res += u;

    在这一行中,您尝试将int 添加到string,这将返回意外结果。要解决此问题,您可以改用res.push_back(u + '0')(这会将u 转换为字符,然后将其附加到res:没有意外结果)。

    您也可以在 3 行以下输入 res += carry; 时执行相同的操作,因此请务必修复该问题。

    【讨论】:

    • 是的,另外,删除 48 并使用 '0' 代替。
    • 没问题。您应该搜索 C++ 类型转换以更好地了解此错误发生的时间和原因。祝你的程序好运。
    • UB 是怎么回事?
    • 什么都没有。你是对的;我在帖子中将“未定义的行为”更改为“意外的结果”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多