演算法流程:
(1)大數可能超出任何一種整數型別,會引發溢位問題,所以用字串的格式儲存字串a,b;
(2)獲取字串a的長度為alen,字串b的長度為blen;
(3)比較alen和blen的大小,用maxlen儲存更大值。
(4)建立陣列aarr,大小為maxlen,儲存字串a每一位上的值
(5)建立陣列barr,大小為maxlen,儲存字串b每一位上的值,不夠的補0,
(6)建立陣列sumarr,大小為maxlen,儲存兩數之和。
(7)建立乙個整數用於儲存兩數相加的進製jin,初始化等於0,是因為兩個數的個位數相加進製一定等於0。
(9)因為兩數相加一般從個位開始,所以用sumarr[maxlen-1]儲存(a的個位+b的個位的+進製)的和除以10的餘數,獲取進製jin=(a的個位+b的個位的+進製)的和除以10的整除數
class solution(object):
def addtwonumbers(self, l1, l2):
""":type l1: list
:type l2: list
:rtype: list
"""l1 = list(reversed(l1))
l2 = list(reversed(l2))
l1,l2 = self.judgelen(l1,l2)
print(l1,l2)
add_nums =
for i in range(len(l1)):
add_num,flag = self.judgecarry(l1[i],l2[i])
if flag==0:
else:
try:
l1[i+1] = l1[i+1]+1
except:
continue
if add_nums[-1]==0:
print(list(reversed(add_nums)))
def judgecarry(self,a,b):
if a+b>9:
return [(a+b)%10,1]
else:
return [a+b,0]
def judgelen(self,l1,l2):
lenl1 = len(l1)
lenl2 = len(l2)
add_len =
for i in range(abs(lenl2-lenl1)):
if lenl1>=lenl2:
for i in range(abs(lenl2-lenl1)):
# print([l1,add_len])
return [l1,l2]
else:
for i in range(abs(lenl2-lenl1)):
# print([l2,add_len])
參考: csdn-專業it技術社群-登入blog.csdn.net
大數相加演算法www.jianshu.com
大數相加,大數相乘
題目 大數相加鏈結 思路 為了方便兩個字串相加,我們將短的字串,前面補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...
大數相加 大數相乘 C
最簡單的思路是直接用int型陣列儲存大數的每一位,程式比較容易實現,但是效率稍低,直接上 include includeusing namespace std class bign bign const bign t bign operator const bign t bign operator ...
劫後餘生 大數相加,大數相減)
題目描述 lzy歷經千辛萬苦終於逃出了密室。他覺得這個密室很好玩,就想讓他的徒弟wyb也體驗一下。聽說wyb的a b學的滾瓜爛熟,特意出了一道加減法給她測測自己的底子,為進密室做做準備。輸入題目有多組輸入樣例,輸入三個非負整數 a,b,c 位數均不超過10000位 約束 對於每個測試資料檔案,測試樣...