大數相加減,大數相乘(減法還沒弄)

2021-09-25 13:45:42 字數 1840 閱讀 3560

415. 字串相加

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

方法1:用字串的解法,從低位開始對應相加,然後設定乙個carry變數表示進製。每次得到的插入到現在結果開頭就可以了。

class solution   

int i = num1.size()-1,j = num2.size()-1;

int carry = 0;

string res;

while(i >=0 || j >=0)

//小心可能最後還有進製:'1' + '9'

return carry == 1 ? '1'+res : res;}};

方法2:使用陣列。首先把每一位對應相加,然後從後向前遍歷,把進製的累加到前一位就可以了。如果字串str1長度為m,str2長度為n,那麼儲存結果的陣列長度為max(m,n) + 1,因為還可能存在一位進製。不過這種題目會告訴你字串最大長度。

直接開闢最大長度空間+1就可以了。

題目要求:

num1 和num2 的長度都小於 5100.

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

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

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

43. 字串相乘

總結:用陣列的解法。首先兩個數字字串n1,n2相乘,得到結果最長為(n1+n2)位。開闢乙個這樣長度的陣列記為:result

最重要的問題:字串str1的第i位,和字串str2的第j位相乘之後,得到的結果放在result的哪一位?

當6(第1位)x9((第1位)時,結果54在result的第3位。

當6(第1位)x8((第0位)時,結果48在result的第2位。

當7(第0位)x9((第1位)時,結果63在result的第2位。

當7(第0位)x8((第0位)時,結果54在result的第1位。

歸納出結論str[i]乘以str[j]的結構放在result[i+j+1]。

一些邊界條件還是要注意,比如字串為空;字串是「0」;另外最終結果在輸出的時候也要注意把前面的0給略過。

大數相乘 大數相加

大數相乘 大數相乘 1 include includeint main int ans i while lb 0 int cnt j for i 0 i 0 i if e i break 去除前面多餘的0 if i 1 else 當結果是0的時候 printf 0 printf n return 0...

大數相加 相乘

用字串儲存兩個大數。把加法分解成 一,同一位上為 a b 10 二,進製 a b 10 三,把第一數 進製 感覺是遞迴了。但可以用迴圈在代替。大數相乘也差不多,第二數的每一位數都與第乙個數每一位相乘,然後相加起來.以下我們假設兩個字串裡都是數字,之里不做判斷了.為了解題方便,我還把數字都移到陣列的右...

大數相加和大數相乘

大數相加 從後向前變數相加的字串,並將當前位的數轉為整型進行加法操作,並判斷是否有進製,儲存進製,以便進行下一次的操作。大數相加 char add char str1,char str2 else ans max sum 0 第乙個字串還有剩餘 while i 0 第二個字串還有剩餘 while j...