python進行兩個大數相加


python進行兩個大數相加:由於int類型32位或64位都有長度限制,超出會內存溢出,無法計算,那么解決方法如下:

思路:

1.將超長數轉換成字符串

2.進行長度補零,即讓兩個要計算的字符串長度一樣。

3.將兩個字符串,分解成列表,並進行翻轉(翻轉后,個位在前,目的,從個位往高位計算)

4.創建一個長度與要計算的字符串長度相同的列表,元素填充為0.

5.遍歷列表,由於兩個列表長度相同,遍歷任何一個都可以。

6.由於是10進制,所以兩個值累加后與10進行比較,大於等於即有進位。

# 存儲每次的計算結果
sum_list = [0]

a = "12345678"

b = "3456785555"

# 長度補零操作。
if len(a) > len(b):
    lc = len(a) - len(b)
    b = '{}{}'.format(r'0' * lc, b)
elif len(a) < len(b):
    lc = len(b) - len(a)
    a = '{}{}'.format(r'0' * lc, a)

# 初始化長度與計算長度相同,零填充
sum_list = sum_list * len(a)

# 所以位數,翻轉,即從各位向前計算
str1 = list(a[::-1])

str2 = list(b[::-1])

# 位置累加進位。
for i, v in enumerate(str1):
    # sum_list[i] 為進位,所以每次加上進位
    v_add = int(str2[i]) + int(v) + sum_list[i]
    if v_add >= 10:
        m, va = divmod(v_add, 10)
        sum_list[i] = va
        sum_list[i + 1] = m
    else:
        # 沒有進位,無需累加,直接寫值
        sum_list[i] = v_add

# 計算完成,翻轉,轉成字符串。
print(''.join('%s'% vi for vi in sum_list[::-1]))

結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM