python實現高精度加法

2021-07-10 04:39:34 字數 1276 閱讀 3646

之前一直使用的c++, c++沒有提供高精度的計算方案, 所以大整數的運算都需要手動實現,python已經為我們提供了高精度運算, 這裡出於剛學習python作為練習, **實現高精度加法運算的原理. 高精度加法的過程就是完全模擬列豎式計算的方式,我們開兩個列表,將加數a,假如a=1243,在列表中儲存為[1, 2, 4, 3], 加數b, 假如b=12, 在列表中儲存為[1, 2], 這樣的話兩個列表的長度不同, 就會後面**實現的不便, 因此, 在執行計算前, 我們將兩個列表處理為

[0, 1, 2, 4, 3]

[0, 0, 0, 1, 2]

即使兩個數長度一致, 短的在左邊補0, 最後再在兩個數左端都新增乙個0, 這樣是為了防止最高位進製後導致進製的值沒有地方儲存, 我們從右邊計算到左邊,將計算的每一位數儲存到列表a中, 上面兩個數相加時2+3=5求餘儲存到a[4], 取整加到a[3]處理進製,4+1=5求餘儲存到a[3], 取整加到a[2], 依次類推, 如果兩數之和大於10, 則有進製1, 否則就是進製0, 相當於沒有進製

下面請看**實現:

from functools import reduce#匯入reduce用於將整數列表中的內容轉換為字串

defadd

(a, b):

if len(a) > len(b):#將輸入的數字左端補齊為同樣的長度

b = b.zfill(len(a) - len(b) + 1)

else:

a = a.zfill(len(b) - len(a) + 1)

#("0" + str(a))前面加"0"的原因是防止最高位進製是超過列表的容量限制

#比如說9+9會向前面進一位,如果沒有新增額外的0的話進製1就沒地方儲存

a = list(map(lambda x : int(x), ("0" + str(a)).strip()))

b = list(map(lambda x : int(x), ("0" + str(b)).strip()))

for i in range(len(a) - 1, 0, -1):

temp = a[i] + b[i];

a[i - 1] += temp // 10

a[i] = temp % 10

return int(reduce(lambda x, y : str(x) + str(y), a))#轉換為字串

a, b = input("input a: "), input("input b: ")

print(add(a, b))

python高精度加法 高精度加法

1.思路 其實就是模擬,加法是最簡單的,從個位開始加,價位加到前一位,然後再取10的餘數。for int i 1 i len i 計算和 c i a i b i 進製 c i 1 c i 10 取10的餘數 c i 10 2.實現 int len max a.length b.length 倒著存,...

Python 高精度加法

問題描述 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述 由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義乙個陣列a,a 0 用於儲存a的個位,a 1 用於儲存a的十位,依此類推。同樣可以用乙個陣列b來儲存b。計算c ...

高精度加法 高精度減法

雖然以前自己就學習過,但是自己打出來的 目測效率不高,也不夠精簡 因此學習一下eden裡面的這一題 big integer add subtract ifndef big integer define big integer include include using std string usin...