python实现高精度乘法

发布时间:2019-09-01 10:38:23编辑:auto阅读(2976)

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

    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))

关键字