2016-10-09 4 views
-1

Ich versuche, das folgende Problem zu lösen, die zwei Strings hinzufügen, ohne sie in Ganzzahl zu konvertieren. Ich habe eine Lösung für das Problem gefunden, aber ich verstehe es nicht. Würde es jemand bitte auf Englisch erklären?Erläutern von C++ - Code zum Hinzufügen von zwei Strings

hier ist der Code:

class Solution { 
public: 
    string addStrings(string num1, string num2) { 
     int i=num1.size()-1,j=num2.size()-1,carry=0; 
     string res=""; 
     while(i>=0||j>=0) 
     { 
      if(i>=0) carry+=num1[i--]-'0'; 
      if(j>=0) carry+=num2[j--]-'0'; 
      res=to_string(carry%10)+res; 
      carry/=10; 
     } 
     return carry?"1"+res:res; 
    } 
}; 
+0

Was Sie nicht süecifically verstehen? –

+0

Machen Sie alles auf Papier für zwei kleine Zahlen. Oder durchlaufen Sie es zeilenweise in einem Debugger. –

+0

Dies ist vergleichbar mit dem Hinzufügen von zwei Zahlen auf dem Papier. – Tempux

Antwort

0

Stimmt! Lass es dir erklären. Zahlen sind von 0-9. Daher ist die maximal mögliche Summe < = 18. Also müssen wir eine Dummy-Variable mit Flag/Anzahl/tragen, die 1 sein wird, wenn unsere Summe 10 (num1 [i] - '0' + num2 [i] - '0'> = 10) überschreitet. Wenn wir zwei Zahlen hinzufügen, beginnen wir mit dem Ende. Dasselbe gilt für die Schleife von Ende zu Anfang, d.h. während (i> = 0 oder j> = 0 oder Zählung). Count ist in während Aussage 'coz was, wenn i = 0 &/| j = 0 summe ist mehr als 10, dann müssen wir am Anfang der string eine zusätzliche hinzufügen. Fügen Sie Elemente aus beiden Strings hinzu und dekrementieren Sie den entsprechenden Zähler i--, j--. Fügen Sie carry entweder 0 oder 1 hinzu. Berechnen Sie einen neuen Übertrag, der an die nächste Summenberechnung weitergegeben wird. Nehmen wir Modulo der Summe, wie wir eine einzelne Ziffer wollen. Covert es in Zeichenfolge und an Res anhängen.

My-Code

class Solution { 
public: 
string addStrings(string num1, string num2) { 
    int n1 = num1.size(), i = n1 - 1; 
    int n2 = num2.size(), j = n2 - 1; 
    int carry = 0; 
    string res = ""; 
    while(i>=0 || j>=0 || carry){ 
     long sum = 0; 
     if(i >= 0){sum += (num1[i] - '0');i--;} 
     if(j >= 0){sum += (num2[j] - '0');j--;} 
     sum += carry; 
     carry = sum/10; 
     sum = sum % 10; 
     res = to_string(sum) + res; 
    } 
    return res; 
} 
}; 
Verwandte Themen