大数相乘相加[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):
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值