y大的乘法模板没怎么看明白,这里直接用加法循环来替代乘法。
举例说明,A*9435,需要进行9+4+3+5+4=25次加法。即循环25次加法函数,时间可以接受。
加法的函数来自于前两题我写的加法函数,但是有两点需要注意一下。
一是传入函数的两个list要固定住,不能在计算过程中被修改。
二是函数式编程中各个函数的变量名要区分开,否则嵌套的时候容易混淆。
A = list(map(int, input()))
B = list(map(int, input()))
def add(a1_backup, a2_backup):
import copy
a1 = copy.deepcopy(a1_backup)
a2 = copy.deepcopy(a2_backup)
length = max(len(a1), len(a2))
a1.reverse()
a2.reverse()
while length - len(a1) > 0:
a1.append(0)
while length - len(a2) > 0:
a2.append(0)
a3 = []
t = 0
for i in range(length):
if a1[i] + a2[i] + t < 10:
a3.append(a1[i] + a2[i] + t)
t = 0
else:
a3.append((a1[i] + a2[i] + t) % 10)
t = 1
if t == 1:
a3.append(1)
a3.reverse()
return a3
def multi(m1, m2):
ans_in_diff_dim = []
m2.reverse()
for i in range(len(m2)):
m3 = []
for u in range(m2[i]):
m3 = add(m3, m1)
for k in range(i):
m3.append(0)
ans_in_diff_dim.append(m3)
m4 = []
for i in range(len(ans_in_diff_dim)):
m4 = add(m4, ans_in_diff_dim[i])
return m4
print(''.join(list(map(str, multi(A, B)))))
但是Python不是自带高精么(而且乘法还带FFT的来着)
是的 但是我笔试遇到过写一个不能用乘号的乘法的题 所以练练 防止下次再考到233
哦?有点味道