• 大数问题


    一、目录:

    二、题目1:两个大数相乘

    有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。

     输入描述:

      空格分隔的两个字符串,代表输入的两个大整数

     输出描述:

      输入的乘积,用字符串表示
      示例1
    输入
    72106547548473106236 982161082972751393

    输出
    70820244829634538040848656466105986748

    思路:https://blog.csdn.net/boguesfei/article/details/81368336

    计算的过程基本上和小学生列竖式做乘法相同。为编程方便,并不急于处理进位,而将进位问题留待最后统一处理。
    现以 835×49为例来说明程序的计算过程。
    先算835×9。5×9得到45个1,3×9得到27个10,8×9得到72个100。由于不急于处理进位,所以835×9算完后,aResult如下:
     
    接下来算4×5。此处4×5的结果代表20个10,因此要 aResult[1]+=20,变为:
     
     
    再下来算4×3。此处4×3的结果代表12个100,因此要 aResult[2]+= 12,变为:
     
    最后算 4×8。此处4×8的结果代表 32个1000,因此要 aResult[3]+= 32,变为:

     
    乘法过程完毕。接下来从 aResult[0]开始向高位逐位处理进位问题。aResult[0]留下5,把4加到aResult[1]上,aResult[1]变为51后,应留下1,把5加到aResult[2]上……最终使得aResult里的每个元素都是1位数,结果就算出来了:
     

    总结一个规律,即一个数的第i位和另一个数的第j位相乘所得的数,一定是要累加到结果的第i+j位上。这里i, j都是从右往左,从0开始数。
     

    代码:

    def largeIntMul(num1,num2):
        if not num1 or not num2:
            return -1
        m1 , m2 = len(num1) , len(num2)
        res , tmp = [0]* (m1+m2+1), [0] * (m1+m2)
        n1 = num1 if  m1 > m2 else num2
        n2 = num2 if n1 == num1 else num1
        for i in range(len(n2)):
            for j in range(len(n1)):
                tmp[j+i] += int(n2[i])*int(n1[j])
        a = 0
        for i,t in enumerate(tmp):
            b = (t + a) % 10
            a = (t + a) // 10
            res[i] = b
        res[i+1] = a
        res = list(map(str,res))
        res = ''.join(res[::-1])
        return res.lstrip('0')
    if __name__=='__main__':
        num1 , num2 = input().split()
        print(largeIntMul(num1[::-1],num2[::-1]))
     
     
  • 相关阅读:
    Django——form组件和ModelForm
    CDH hadoop的安装
    Vulnhub-靶机-PRIME: 1
    Vulnhub-靶机-SYMFONOS: 5
    sqlilab-Less-21-30-writeup
    Vulnhub-靶机-SYMFONOS: 4
    Vulnhub-靶机-SYMFONOS: 3
    基础汇总-sqlilab-Less-1-20
    sqlilab-Less-13-19 测试writeup
    sqlilab-Less-9-12 测试writeup
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/10672261.html
Copyright © 2020-2023  润新知