算法—大数相乘

大数相乘,顾名思义就是两个很大的数相乘,不能用系统自带的函数去处理,你怎么解决它?(比如:2322424*3156357)

这一题的思路是,就是按最原始的乘法,竖着的计算方法去进行处理。

如下图:

                                         

按照上面的思路,代码如下:

def mul(a,b):
    a.reverse()   #数据放到列表中,因为要从个位相乘,所以要反转列表
    b.reverse()
    res = [0 for i in range(len(a)+len(b))] #长度默认两数长度和
    for j in range(len(a)):
        for k in range(len(b)):  #两个for循环,两两相乘,先不进位
            res[j+k] += a[j] * b[k]  #把相同位置的相加,还不进位
    for m in range(len(res)):   #这个for循环就是为了去进位
        if res[m] > 9:
            res[m+1] = res[m+1] + res[m]//10   #商放到下一位
            res[m] = res[m] % 10   #余数留下来
    res.reverse()   #再反转就ok了
    if res[0] == 0:   #可能首位会为0,把0去掉就ok了
        return res[1:]
    else:
        return res
print(mul([1,2,3],[4,5,6]))  #结果[5, 6, 0, 8, 8]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值