大数相乘相加[Python]

s竖式乘法和加法:

from random import randint
def Mul(str1,str2):
    num1 = list(map(int, reversed(str1)))
    num2 = list(map(int, reversed(str2)))
    res = [0]*(len(num1)+len(num2))

    for index2, val2 in enumerate(num2):
        carry = 0
        for index1,val1 in enumerate(num1):
            cur_res = val2*val1
            carry, res[index1+index2] = divmod((cur_res+carry+res[index1+index2]),10)
        res[index1+index2+1] = carry
    result = int(''.join(map(str,reversed(res))))
    return result
def Add(str1, str2):
    num1 = list(map(int, reversed(str1)))
    num2 = list(map(int, reversed(str2)))
    res_len = max(len(num1),len(num2))+1

    if len(num1) < res_len-1:
        num1.extend([0]*(res_len-1-len(num1)))
    elif len(num2) <res_len-1:
        num2.extend([0]*(res_len-1-len(num2)))

    res = [0] * (max(len(num1),len(num2))+1)

    carray = 0
    for index,val in enumerate(num1):
        carray, res[index] = divmod((num1[index]+num2[index]+carray),10)
    res[index+1] += carray

    result = int(''.join(map(str, reversed(res))))
    return result



for i in range(1000):
    a = str(randint(1, 1000000000))
    b = str(randint(1, 10000))
    r = Add(a, b)
    if r != int(a)+int(b):

猜你喜欢

转载自blog.csdn.net/jillian_sea/article/details/80326372