Я не могу понять, что идет не так, когда пытаюсь сложить две большие струны - PullRequest
0 голосов
/ 10 июля 2020
• 1000 пытался отладить его, включив в код операторы 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;
    }

1 Ответ

5 голосов
/ 10 июля 2020

Вы объявляете std::string с именем res в своей программе, которую вы хотите вернуть из своей функции. Все работает нормально до этой строки:

res += u;

В этой строке вы пытаетесь добавить int к string, что вернет неожиданные результаты. Чтобы исправить это, вы можете вместо этого использовать res.push_back(u + '0') (это преобразует u в символ, а затем добавляет его в res: никаких неожиданных результатов).

Вы также делаете то же самое на 3 строки вниз, где вы набираете res += carry;, так что обязательно исправьте и это.

...