Given two numbers represented as strings, return multiplication of the numbers as a string.
Note:
- The numbers can be arbitrarily large and are non-negative.
- Converting the input string to integer is NOT allowed.
- You should NOT use internal library such as BigInteger.
Subscribe to see which companies asked this question
class Solution(object):
def multiply_1(self, num1, num2):
result = [0] * (len(num1)+1)
for i in range(len(num1))[::-1]:
result[i+1] += (num1[i] * num2) % 10
result[i] += (num1[i] * num2) // 10
return result
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
num1 = list(num1)
num2 = list(num2)
for i in range(len(num1)):
num1[i] = int(num1[i])
for i in range(len(num2)):
num2[i] = int(num2[i])
data = []
for n2 in num2[::-1]:
data.append(self.multiply_1(num1,n2))
len_1 = len(num1)
len_2 = len(num2)
total_len = len_1 + len_2
result = [0] * (total_len + 1)
for i in range(len(data)):
for j in range(len_1 + 1)[::-1]:
result[len_2 - i + j] = (result[len_2 - i + j] + data[i][j])
c = 0
for i in range(total_len + 1)[::-1]:
temp = (result[i] + c) // 10
result[i] = (result[i] + c) % 10
c = temp
temp = -1
flag = True
for i in range(total_len + 1):
if flag and result[i] != 0:
temp = i
flag =False
result[i] = str(result[i])
if temp == -1:
return '0'
return ''.join(result[temp:])