和海王一起從零刷題之2 大數加法

2021-10-25 08:52:42 字數 1286 閱讀 1767

這是乙個面試很喜歡問的問題,也不算很複雜。

要把a,b兩個很大的數(超過了long long)的表示範圍,相加並得出結果。

應該如何做?

簡單,需要掌握陣列,字串等知識,但容易出錯。

假設a=12345 b=56789;由於a,b太長了,這裡只取前五位說明:

接收應該用2個字串陣列來接收a,b。

儲存a=「12345」 -> [5,4,3,2,1]

b=「56789」 -> [9,8,7,6,5]

為什麼要倒著放呢?因為這樣a+b如果溢位了,可以往後面繼續進製。

但還有個問題:我們不知道這個數字是幾位的。因此可以這樣:

a:[5,5,4,3,2,1]

b:[5,9,8,7,6,5]

相加直接把a和b從第一位加到第五位存到c裡面。

c:[5,14,12,10,8,6]

處理進製

如果c中元素有大於等於10的,那就把其減去10,然後對右邊的元素+1,從左到右處理。注意最後一位要特殊處理,因為總長度要+1了。

c:[5,4,3,1,9,6]

輸出記得我們是倒著存的,輸出也要倒著輸出:長度不用輸出

c->69134

檢查一下:12345+56789=69134

#include

#include

using

namespace std;

int num1[

100]

,num2[

100]

,sum[

100]

;char s1[

100]

,s2[

100]

;int

main()

for(

int i =

0,j = num2[0]

;j >

0;i++

,j--

) sum[0]

=max

(num1[0]

,num2[0]

);for(

int i =

1;i <= sum[0]

;i++

)//處理進製

for(

int i =

1;i <= sum[0]

; i++)}

}//倒著輸出

for(

int i = sum[0]

;i >

0;i--

) cout

}

可以嘗試解決一下這個問題:

和海王一起從零刷題之1 回形陣列

這個oj需要登入才能使用,不過裡面的題都還挺好的,從簡單到複雜,分門別類。感興趣的可以用一用,不感興趣可以直接看下面。簡單,適合學完基礎語法的同學,只需要了解迴圈,陣列等知識。輸入乙個正整數n,輸出n n的回形方陣。例如,n 5時,輸出 111 1112 2211 2321 1222 1111 11...

和融躍一起零基礎學習FRM

frm被稱為是 無法自學通過 的考試,對於零基礎考生來說,首先就必須要對自己的備考進行規劃,留下充足的複習時間,才能夠順利通過考試。garp協會的建議是15周的時間通過一門考試,需要根據自己的實際情況進行調整,找出最適合自己的備考方案。把自己的備考分成四個階段 第一階段,通讀階段 結合考試大綱將考試...

和菜鳥一起學c之函式指標

還有sd卡的檔案格式識別還不會,等明天和飛刀一起討論下,基本的android的sd卡的自動掛載已經實現了,可惜只支援fat格式的,ext格式的他不支援,新增了那些其他格式的掛載還是不行,主要是識別還不知道怎麼去實現。好了,既然這麼著,還是把以前看的一些函式指標做個記錄吧。因為linux驅動中很多很多...