这道题总的来说就是一个用加法器模拟乘法的问题,在这里我新建了两个函数,一个是两字符串相加,一个是重复相加,以此来构建乘法器。
class Solution:
def Add(self, num1, num2):
num1 = list(num1[::-1])
num2 = list(num2[::-1])
more = 0
for i in range(len(num2)):
if int(num1[i]) + int(num2[i]) + more - 10 >= 0:
num1[i] = str(int(num1[i]) + int(num2[i]) + more - 10)
more = 1
else:
num1[i] = str(int(num1[i]) + int(num2[i]) + more)
more = 0
i+=1
while(i<len(num1)):
if int(num1[i]) + more - 10 >= 0:
num1[i] = str(int(num1[i]) + more - 10)
more = 1
else:
num1[i] = str(int(num1[i]) + more)
more = 0
i+=1
if more == 1: num1.append('1')
return ''.join(num1[::-1])
def repeatAdd(self, n, s):
if n == 0: return '0'
res = s
for i in range(n-1):
res = self.Add(res, s)
return res
def multiply(self, num1: str, num2: str) -> str:
if num1[0] == '0' or num2[0] == '0':
return "0"
res = '0'
more = ''
for n in num2[::-1]:
num = int(n)
temp_res = self.repeatAdd(num, num1)
temp_res += more
if len(res) > len(temp_res):
res = self.Add(res, temp_res)
else:
res = self.Add(temp_res, res)
more += '0'
return res