Python 如何优化程序,计算超大数加法

利用python计算超大的数m,n的和,要求执行时间不超过两秒。
m,n都是10的10次方的10次方内的数。

img

思路是二分法,只写了偶数的,思路是相同的。根据计算机性能二分,四分都行。

a=9987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462998765646299876564629987656462
b=a
a=str(a)
b=str(b)
'''字符串二分法'''
len_a=int(len(a)/2)#奇位数自己if
len_b=int(len(b)/2)
if len_a<=len_b:#取位数较少的二分
    a1=a[:len_a]
    a2=a[len_a:]
    b1=b[:len_a]
    b2=b[len_a:]
    ab1=eval(a1+b1)#前半数求和
    ab2=eval(a2+b2)#后半数求和
    if len(ab2)>len_a:#后半数相加是否进位
        ab1+=1
        ab2=ab2[1:]
    sum=f'{ab1}{ab2}'#整合
print(sum)

你试试这个,10^(10^10)这么大数,我的计算机表示受不了

def addNum(num1: str, num2: str):
    resultList = []
    len1, len2 = len(num1), len(num2)
    i, j = len1 - 1, len2 - 1
    addr = 0
    while i >= 0 and j >= 0:
        addr += eval(num1[i]) + eval(num2[j])
        resultList.insert(0, chr(addr % 10 + ord('0')))
        addr = int(addr / 10)
        i -= 1
        j -= 1
    while i >= 0:
        addr += eval(num1[i])
        resultList.insert(0, chr(addr % 10 + ord('0')))
        addr /= 10
        i -= 1
    while j >= 0:
        addr += eval(num2[j])
        resultList.insert(0, chr(addr % 10 + ord('0')))
        addr /= 10
        j -= 1
    if addr > 0:
        resultList.insert(0, chr(addr % 10 + ord('0')))
    return ''.join(resultList)