Multiply Strings
题目描述
大数相乘, A, B
解题方法
这种题目就是模拟人进行乘法运算的过程。
从低位开始相乘,从一个array将A[i]和B[j]的乘积存下来。
要注意的是,人做乘法的时候是从低位开始的,而array表示数字的时候是高位在前 这一点要注意。
- 要从后往前计算
- 最后的结果前面要去0
Solution
class Solution:
# @param A : string
# @param B : string
# @return a strings
def multiply(self, A, B):
length_A = len(A)
length_B = len(B)
if (length_A == 1 and A == "0") or (length_B == 1 and B == "0"):
return 0
if length_A == 1 and A == "1":
return B
if length_B == 1 and B == "1":
return A
sign = 1
if A[0] == "-":
sign *= -1
A = A[1:]
length_A -= 1
if B[0] == "-":
sign *= -1
B = B[1:]
length_B -= 1
multi_results = [0 for i in range(length_A + length_B)]
# 要注意是从低位往高位计算
for i in range(length_A):
for j in range(length_B):
num_a = int(A[length_A-1-i])
num_b = int(B[length_B-1-j])
multi_results[length_A+length_B-1-(i+j)] += num_a * num_b
result = ""
carry = 0
for k in range(length_A+length_B-1, -1, -1):
cur_sum = carry + multi_results[k]
digit = cur_sum % 10
carry = cur_sum / 10
multi_results[k] = digit
result = str(digit) + result
# 不要忘了carry
if carry:
result = str(carry) + result
# 如果结果前面有0,要将0去掉,因为我们开的array是length_A + leng_B
# 所以这一步必须
while result[0] == "0":
if result == "0":
break
result = result[1:]
return result