2016-10-09 5 views
-1

2つの文字列を整数に変換せずに追加する方法について、次の問題を解決しようとしています。私は問題の解決策を見つけましたが、私はそれを理解していません。誰かが普通の英語で説明してくれますか?ここ2つの文字列を追加するためのC++コードの説明

はコードです:

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

? –

+0

2つの小さな番号のためにすべてそれを紙で行います。または、デバッガで1行ずつステップ実行します。 –

+0

これは紙に2つの数字を追加するのと同じです。 – Tempux

答えて

0

大丈夫! Lemmeはあなたに説明します。数字は0〜9です。したがって、可能な最大合計は< = 18です。したがって、私たちの合計が1(num1 [i] - '0' + num2 [i] - '0'> = 10)を超えると1になるフラグ/カウント/キャリーダミー変数を取る必要があります。。 2つの数字を追加すると、最後から開始します。ここでは、(i> = 0またはj> = 0またはカウント)の間にループを繰り返します。。カウントはにありますが、の文 'coz what if i = 0 &/| j = 0 sumが10より大きい場合、文字列の先頭に余分な1を追加する必要があります。 両方の文字列から要素を追加し、対応するカウンタi - 、j - を減分します。加算を0または1のいずれかに加算します。次の合計計算に渡される新しい桁上がりを計算します。私たちが1桁を望むように、モジュロを取る。それを文字列に変換し、resに追加します。あなたがsüecifically理解していない何

マイコード

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; 
} 
}; 
関連する問題