zoukankan      html  css  js  c++  java
  • 大整数相乘

    有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
    输入描述:
    空格分隔的两个字符串,代表输入的两个大整数
    输出描述:
    输入的乘积,用字符串表示
    输入例子1:
    72106547548473106236 982161082972751393

    输出例子1:
    70820244829634538040848656466105986748

     1 def get_mul(num, k):
     2     mid_val = 0
     3     result = []
     4     for i in num[::-1]:
     5         temp = int(i)*k + mid_val
     6         if temp < 10:
     7             mid_val = 0
     8             result.append(temp)
     9         else:
    10             result.append(temp % 10)
    11             mid_val = temp // 10
    12     if mid_val > 0:
    13         result.append(mid_val)
    14     return result[::-1]
    15 
    16 def get_sum(s1, s2):
    17     len1 = len(s1)
    18     len2 = len(s2)
    19     if len1 > len2:
    20         s2 = [0] * (len1 - len2) + s2
    21     if len1 < len2:
    22         s1 = [0] * (len2 - len1) + s1
    23     mid_temp = 0
    24     sum_list = []
    25     for m in range(len(s1)-1, -1, -1):
    26         temp_ = s1[m] + s2[m] + mid_temp
    27         if temp_ < 10:
    28             mid_temp = 0
    29             sum_list.append(temp_)
    30         else:
    31             sum_list.append(temp_ % 10)
    32             mid_temp = temp_ // 10
    33     if mid_temp > 0:
    34         sum_list.append(mid_temp)
    35     return sum_list[::-1]
    36 
    37 if __name__ == '__main__':
    38     str_ = input()
    39     num1, num2 = str_.split()
    40     first = get_mul(num1, int(num2[-1]))
    41     for j in range(len(num2)-2, -1, -1):
    42         mul_v = get_mul(num1, int(num2[j]))
    43         mul_v = mul_v + [0]*(len(num2)-j-1)
    44         cross_v = get_sum(first, mul_v)
    45         first = cross_v
    46     first = map(str, first)
    47     final_result = ''.join(first)
    48     print(final_result)


  • 相关阅读:
    pair和map
    lower_bound( )和upper_bound( )
    P1886 滑动窗口 /【模板】单调队列
    数的度(数位dp)
    最小生成树
    刷题-力扣-1052. 爱生气的书店老板
    刷题-力扣-766. 托普利茨矩阵
    刷题-力扣-28. 实现 strStr()
    刷题-力扣-697. 数组的度
    刷题-力扣-1004. 最大连续1的个数 III
  • 原文地址:https://www.cnblogs.com/laresh/p/7465794.html
Copyright © 2011-2022 走看看