大整数相乘
有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
输入描述:
空格分隔的两个字符串,代表输入的两个大整数
输出描述:
输入的乘积,用字符串表示
输入例子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)