首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python实现高精度乘法

python实现高精度乘法

作者头像
py3study
发布于 2020-01-08 18:34:39
发布于 2020-01-08 18:34:39
2.4K0
举报
文章被收录于专栏:python3python3

方法是将两个乘数转为两个包含乘数每位数字的list, 因为在计算中两个list中的数据要反复使用,所以定义第三个list来保存乘法的运算结果,然后使用两重循序模拟列竖式计算出乘法运算的结果, 因为乘法运算每次运算时需要向前移动一位表示扩大10倍,所以定义变量pos标记计算时移动的位数, 每次移动一位

代码语言:javascript
复制
from functools import reduce
def multiply(a, b):
    a = list(map(lambda x : int(x), a.strip()))
    b = list(map(lambda x : int(x), b.strip()))
    c = list(map(lambda x : 0, ("0" + str(a) + str(b)).strip()))
    index = len(c) - 1;
    for i in range(len(a) - 1, -1, -1):
        pos = 0
        for j in range(len(b) - 1, -1, -1):
            temp = a[i] * b[j] + c[index - pos] #两个乘数相乘,并加上在此前一次的进位
            c[index - pos] = temp % 10 #保存运算求余结果
            c[index - pos - 1] += temp // 10 #处理进位,进位可以是0或者大于0的数
            pos += 1
        index -= 1
    return int(reduce(lambda x, y : str(x) + str(y), c)) #将list中的内容转换为字符串

a = input("input a: ")
b = input("input b: ")
print(multiply(a, b))
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档