天天看點

【LeetCode】C++ :簡單題 - 字元串 415. 字元串相加

415. 字元串相加

難度簡單302

給定兩個字元串形式的非負整數 

num1

 和

num2

 ,計算它們的和。

提示:

  1. num1

     和

    num2

     的長度都小于 5100
  2. num1

     和

    num2

     都隻包含數字 

    0-9

  3. num1

     和

    num2

     都不包含任何前導零
  4. 你不能使用任何內建 BigInteger 庫, 也不能直接将輸入的字元串轉換為整數形式

這個和兩數相加是一樣道理的,在連結清單裡面也出現過相同的題目。

模拟列豎式計算的過程,主要是一開始以n1 = 0, n2 = 0這樣,然後對非空位數字将其指派給相應的n1, n2,最後不要忘記對進位數進行處理。

我這裡直接利用string類型裡面加的功能,但注意是:res = num + res,不能是res += num,後面這樣得到的結果整好的反着的。

另外,在對char 型的num[i] 計算,不能利用轉int型,是以需要借助ASCII碼,将num[i]-‘0’ 這樣就可以得到int型的num[i]的數值啦

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