Detaillierte Erklärung der Addition großer Zahlen

NC1 Addition großer Zahlen

Das ist ein Problem für Niu Ke.
Sprechen Sie zuerst über Ideen

Hier ist der Funktionsname und seine Parameter

string solve(string s, string t)

1. Zuerst
kehre ich die beiden eingehenden Zeichenfolgen um (umkehren).

reverse(s.begin(),s.end());
reverse(t.begin(),t.end());

warum verkehrt herum

Beispielsweise gibt es zwei Zeichenfolgen
„994“
„9“.
Wenn Sie die Zeichenfolgen durchlaufen möchten, sind die ersten beiden gefundenen Zeichenfolgen 9 und 9

Die tatsächliche Situation sollte jedoch die Addition von 9 und 4 sein

Wenn es also umgekehrt ist, sind es „499“ und „9“, und 9 und 4 werden zuerst addiert

2. Machen Sie die Längen zweier Zeichenfolgen gleich und fügen Sie 0 hinzu, wenn keine Zeichenfolge vorhanden ist

		if(s.size() < t.size()){
    
    
            int len =t.size() - s.size(); 
            for(int i = 0;i < len;i++)
            s.append("0");
        }
        else if(s.size() >t.size()){
    
    
            int len = s.size() - t.size();
            for(int i = 0;i <len;i++)
            t.append("0");
               
        }

Auf diese Weise muss nicht mit der Situation umgegangen werden, dass einer der Strings durchlaufen wurde, der andere String jedoch nicht durchlaufen wurde. sehr angenehm

3.
Verarbeiten Sie abschließend einfach die beiden Zeichenfolgen von Anfang an. Wenn ein Übertrag vorhanden ist, setzen Sie den Übertrag auf 1 und
fügen Sie den Übertrag hinzu, wenn die beiden Zeichen das nächste Mal hinzugefügt werden.

while(i < s.size()&&j < t.size())
        {
    
    
            int num = (carry + (s[i]-48) + (t[j]-48));//cout<<"num"<<num<<" ";
            if( num> 9)
            {
    
    
                int tmp = num % 10;
                carry = 1;
                str = to_string(tmp) + str;

            }
            else {
    
    
                carry = 0;
                str = to_string(num) + str;
                
            }
            i++;
            j++;
        }
        if(carry == 1) str = "1" + str;

Vollständiger Code

class Solution {
    
    
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
    
    
       reverse(s.begin(),s.end());
        reverse(t.begin(),t.end());
        int carry = 0;
        int lens = s.size(),lent = t.size();
        int i = 0, j = 0;
        string str;

        if(s.size() < t.size()){
    
    
            int len =t.size() - s.size(); 
            for(int i = 0;i < len;i++)
            s.append("0");
        }
        else if(s.size() >t.size()){
    
    
            int len = s.size() - t.size();
            for(int i = 0;i <len;i++)
           {
    
    
               t.append("0");
               }
        }

        while(i < s.size()&&j < t.size())
        {
    
    
        
            int num = (carry + (s[i]-48) + (t[j]-48));//cout<<"num"<<num<<" ";
            if( num> 9)
            {
    
    
                int tmp = num % 10;
                carry = 1;
                str = to_string(tmp) + str;

            }
            else {
    
    
                carry = 0;
                str = to_string(num) + str;
                
            }
            i++;
            j++;
        }
        if(carry == 1) str = "1" + str;
        return str;
        
    }
    
};

Guess you like

Origin blog.csdn.net/psq1508690245/article/details/118494773