用python實現兩個超大數的相加,相減


       首先,如果面對2**512,2**1000等這樣大的數據,我們怎么進行相關的運算操作呢?

       我首先想到的是list列表來進行存儲,我們都知道列表的長度是無限的

      下面代碼參考了:https://blog.csdn.net/qdPython/article/details/108964123,https://www.manongdao.com/article-2400992.html等

直接看重要代碼:

對於正負號的處理

def fuhao(data1, data2):
    list_data1 = list(data1)
    list_data2 = list(data2)
    if (data2[0] == "-" and data1[0]!="-"):  #第一個為正數,第二個數為負數的情況
        # print("第一個為正數,第二個數為負數的情況")
        p1 = data1[::1]
        p2 = data2[1::1]
        list_data2 = list(data2)
        list_data2 = ''.join(list_data2)
        list_data1 = list(data1)
        list_data1 = ''.join(list_data1)
    elif (data1[0]=="-" and data2[0]!="-"):   #第一個數為負數,第二個數為正數的情況
        # print("第一個數為負數,第二個數為正數的情況")
        p1 = data1[1::1]
        p2 = data2[::1]
        list_data2 = list(data2)
        list_data2 = ''.join(list_data2)
        list_data1 = list(data1)
        list_data1 = ''.join(list_data1)
    elif (data1[0] == "-" and data2[0] == '-'): #兩個數都是負數的情況
        # print("兩個數都是負數的情況")
        p1 = data1[1::]
        p2 = data2[1::]
    else:
        p1 = data1[::1]
        p2 = data2[::1]
    list_data1 = list(p1)
    list_data1 = ''.join(list_data1)
    list_data2 = list(p2)
    list_data2 = ''.join(list_data2)
    global datas1, datas2
    datas1 = list_data1
    datas2 = list_data2
    global len_data1, len_data2
    len_data1 = len(p1)
    len_data2 = len(p2)

位數對齊(補0操作)

if len_data1 > len_data2:
    lc = len_data1 - len_data2
    datas2 = '{}{}'.format(r'0' * lc, datas2)
elif len_data1 < len_data2:
    lc = len_data2 - len_data1
    datas1 = '{}{}'.format(r'0' * lc, datas1)

進位操作

# 初始化長度與計算長度相同,零填充
c=len(a) if len(a)>len(b) else len(b)
sum_list = sum_list * (c+1)
#兩個數進行相加的操作,將兩個負數也視為兩個正數的相加
def add_data(str1,str2):
    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

........................然后是一些判斷、轉化等操作,此處省略,有需要的朋友私聊

 


免責聲明!

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



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