字串相加, 大數加法

2021-10-05 20:30:03 字數 1045 閱讀 3637

題目描述

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

注意:

num1 和num2 的長度都小於 5100.

num1 和num2 都只包含數字 0-9.

num1 和num2 都不包含任何前導零。

你不能使用任何內建 biginteger 庫, 也不能直接將輸入的字串轉換為整數形式。

思路:首先根據字串 num1 和 num2的長度進行補位, 在長度較短的字串前插字元』0』直至長度相等, 這一步操作可以方便我們利用for迴圈從字串末尾逐位向前相加

設定進製 step 初始值為 0, 用 string ret接收每一次結果, 第一步已經通過補齊操作使得num1, num2長度相等, 因此給利用 resize 給 ret 開好空間 ret.resize(num1.size());

即 ret[i] = (num1[i] - 『0』) + (num2[i] - 『0』) + step + '0;

若該字元 大於 '9』表示下次相加需要進製, 修改 step 為 1

注意如果不大於字元 『9』, 要將step 置為 0(防止之前因為進製將step修改為1, 因此如果不置0, 本來本次相加不需要加1, 但由於上次修改了step為1導致本次相加多加了1)

最後要注意, 當 ret[0] = (num1[0] - 『0』) + (num2[0] - 『0』) + step + '0 的結果大於字元 '9』時, 說明此時需要進製, 但for迴圈記錄本次 ret[0]的結果, 將step置為1之後結束迴圈, 此時返回 ret就丟失了這個記為值, 因此 for迴圈結束 再加一次判斷

即如果 step == 1的, 給 ret前插字元 『1』

**示例:

class solution 

else

step = 0;

} if (step == 1)

ret.insert(0, 1, '1');

return ret;

}};

字串 大數相加

題目 定義兩個一維字元陣列a 20 b 20 表示兩個大正整數,定義c 50 表示a b的結果。輸入大數a和b的位數m n 3 m n 20 以字串形式分別輸入m位大數a和n位大數b,完成a b的計算,並以字元型資料儲存計算結果。因為是 大數 所以用int long long long都不行,需運用...

list 相加 大數相加

演算法流程 1 大數可能超出任何一種整數型別,會引發溢位問題,所以用字串的格式儲存字串a,b 2 獲取字串a的長度為alen,字串b的長度為blen 3 比較alen和blen的大小,用maxlen儲存更大值。4 建立陣列aarr,大小為maxlen,儲存字串a每一位上的值 5 建立陣列barr,大...

大數相加,大數相乘

題目 大數相加鏈結 思路 為了方便兩個字串相加,我們將短的字串,前面補0,最重要的一點是我們需要設定進製標誌ok class solution for int i size num2 i for int i longsize 1 i 0 i else ret c ret if ok 1 return...