資料結構 考研 字串相加與字串相乘

2021-10-09 03:51:30 字數 1057 閱讀 9044

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

解題思路:本題我們只需要對兩個大整數模擬「豎式加法」的過程。對應位置的兩個整數相加之後,如果當前位和超過 10,則向高位進一位。

我們定義兩個指標 i 和 j 分別指向 num1和 num2 的末尾,即最低位,同時定義乙個變數 add 維護當前是否有進製。

①當兩個數字數相同時,當最後一位相加完畢後(也就是指標等於 -1 時)沒有進製,那麼此時相加操作完成。

②若兩個數字數不相同,並且其中乙個字串的指標 i 已經指向-1,那麼在另外乙個字串的指標 j 還未指向 -1 時,把字串i當前的位置進行補 0 操作。當 i 和 j 都指向 -1 ,檢視有無進製,若沒有進製,相加操作結束,若有,再迴圈一次結束。

每次計算好一位的值就把它 push_back 到 ans 字串中,等計算結束再執行reverse操作。

綜上所述我們的迴圈結束條件應當是:

while (i >= 0 || j >= 0 || add != 0)
**如下:

時間複雜度:o(max(len1​,len2​))

空間複雜度:o(1)

#include#include#includeusing namespace std;

string addstrings(string num1,string num2)

reverse(ans.begin(),ans.end());

return ans;

} int main()

reverse(ans.begin(),ans.end());

return ans;

} string multiply(string num1,string num2)

if(add != 0)

reverse(cur.begin(),cur.end());

ans = addstrings(ans,cur);

} return ans;

} int main()

Leetcode 字串相加與字串相減

題目描述2 注意事項 給定兩個字串形式的非負整數 num1 和num2 計算它們的和。示例 輸入 string s1 12 string s2 28 輸出string s3 40 這個題最容易想到的做法就是將字串直接轉換成數字進行相加,然後將相加和轉為字串返回,但是兩個字串直接轉為數字是很容易溢位的...

字串相加

題目 給定兩個字串形式的非負整數num1和num2,計算它們的和。注意 num1和num2的長度都小於 5100.num1和num2都只包含數字0 9.num1和num2都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式 分析 注意幾個方面 1 迴...

字串相加

給定兩個字串形式的非負整數 num1 和num2 計算它們的和。注意 num1 和num2 的長度都小於 5100.num1 和num2 都只包含數字 0 9.num1 和num2 都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式。分析雙指標分別...