415. 字符串相加(C++)


題目

給定兩個字符串形式的非負整數 num1num2 ,計算它們的和。

提示:

  • num1 和num2 的長度都小於 5100
  • num1 和num2 都只包含數字 0-9
  • num1 和num2 都不包含任何前導零
  • 不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字符串轉換為整數形式

分析與題解

本題我們只需要對兩個大整數模擬「豎式加法」的過程。從低到高逐位相加,如果當前位和超過 10,則向高位進一位。

具體實現也不復雜,我們定義兩個指針 i j 分別指向num1和num2 的末尾,即最低位,同時定義一個變量add 維護當前是否有進位。

需要考慮add進位,當出現超出兩個num的最大位數的進位時,程序才會正常運行

然后從末尾到開頭逐位相加即可。對於兩個數字位數不同的處理,這里統一在指針當前下標處於負數的時候返回 0,等價於對位數較短的數字進行了補零操作,這樣就可以除去兩個數字位數不同情況的處理,具體可以看下面的代碼。

class Solution {
public:
    string addStrings(string num1, string num2) {
        int i = num1.size() - 1;
        int j = num2.size() - 1;
        string ans ="";
        int add = 0;
        //考慮下標從0開始的情況,所以size-1
        //同時考慮所有位數耗盡,但是還存在進位的情況
        while(i>=0 || j>=0 || add != 0){
            int x = i>=0?num1[i]-'0':0;
            int y = j>=0?num2[j]-'0':0;
            int result = x + y + add;
            //填入的位數再換成char數據類型
            ans.push_back('0' + result % 10);
            add = result / 10;
            i--;
            j--;
        }
        reverse(ans.begin(),ans.end());
        return ans;
    }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM