2021 3 18 OJ每日一題 高精度加法

2021-10-22 14:39:24 字數 1754 閱讀 3853

輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。

由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。

定義乙個陣列a,a[0]用於儲存a的個位,a[1]用於儲存a的十位,依此類推。同樣可以用乙個陣列b來儲存b。

計算c = a + b的時候,首先將a[0]與b[0]相加,如果有進製產生,則把進製(即和的十位數)存入r,把和的個位數存入c[0],即c[0]等於(a[0]+b[0])%10。然後計算a[1]與b[1]相加,這時還應將低位進上來的值r也加起來,即c[1]應該是a[1]、b[1]和r三個數的和.如果又有進製產生,則仍可將新的進製存入到r中,和的個位存到c[1]中。依此類推,即可求出c的所有位。

最後將c輸出即可。

輸入包括兩行,第一行為乙個非負整數a,第二行為乙個非負整數b。兩個整數都不超過100位,兩數的最高位都不是0。

輸出一行,表示a + b的值。

# 輸入兩個列表

a =list

(input()

)b =

list

(input()

)a =

[int

(i)for i in a]

b =[

int(i)

for i in b]

# 列表逆序

a.reverse(

)b.reverse(

)# c,d分別是其中短的、長的列表

c =min([

len(a)

,len

(b)]

)d =

max(

[len

(a),

len(b)])

# 獲取長度最長的列表lis1

iflen

(a)== d:

lis1 = a

else

: lis1 = b

# 計算長度比較短的列表

lis =

r =0

for i in

range

(c):

shu = a[i]

+ b[i]

+ r if shu <10:

r =0else:10

) r = shu //

10# 兩列表剛好長度相同

if c == d:

if r ==0:

lis.reverse(

)print(''

.join(

map(

str, lis)))

else

: lis.reverse(

)print(''

.join(

map(

str, lis)))

# 列表長度不相同,計算剩餘的列表長度

else

:for j in

range

(c, d)

: m =

(lis1[j]

+ r)

if m >9:

10)r = m //

10else

: r =

0# 再次逆序輸出即可

人生苦短,我用python。

每日一題 1

題目詳情 peter喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太簡單了,於是他準備玩乙個難的遊戲。遊戲規則是在乙個n n的 裡填數,規則 對於每個輸入的n,從左上角開始,總是以對角線為起點,先橫著填,再豎著填。這裡給了一些樣例,請在樣例中找到規律並把這個n n的 列印出來吧。輸入描述 多組測試資料 資...

每日一題2018 3 21

leetcode 2 模擬十進位制運算考察單鏈表基本操作。題無難點,個人基礎需要提高。definition for singly linked list.struct listnode class solution while p while q if shi val s next null ret...

每日一題2018 3 22

leetcode 03 最長不重複子串 第一反應就是動態規劃。看到了網上的方法一。直接把問題簡化為找兩個重複字元間的最長距離,太巧妙了!class solution if i idx max locs s i i return max ling老師的方法二 仍舊轉化為動態規劃,但是為節省空間不再開個...