24字符串相乘

# 这道题不是很难,但是代码我写了很多行。
# 首先就是按照乘法的算法,将每一位和另一个乘数相乘的结果放在一个列表中。
# 然后将列表中的所有字符串相加
class Solution:
def multiply(self, num1: str, num2: str) -> str:
return self.str_multiply(num1,num2)

def str_multiply(self,num1,num2):
# 保证num1是字符串长的那个
if len(num1) < len(num2) :
num1,num2 = num2,num1
strs_list = []
# 如果两个字符串有一个为零直接返回零
if num1 == "0" or num2 == "0":return "0"
for i in range(len(num2) - 1,-1,-1):
jinwei_num = 0
num_str = ""
for j in range(len(num1) - 1,-1,-1):
sum_num = 0
sum_num = jinwei_num + int(num2[i]) * int(num1[j])
jinwei_num = sum_num // 10
sum_num = sum_num % 10
num_str = str(sum_num) + num_str
if jinwei_num != 0:
num_str = str(jinwei_num) + num_str
num_str += (len(num2) - i - 1) * "0"
strs_list.append(num_str)
zuizhong_str = "0"
print(strs_list)
for num_str in strs_list:
zuizhong_str = self.addStrings(zuizhong_str,num_str)
print(zuizhong_str)
return zuizhong_str
def addStrings(self, num1: str, num2: str) -> str:
# 保证num1是字符串长的那个
if len(num1) < len(num2) :
num1,num2 = num2,num1
# 定义变量用来表示当前数和进位数。
sum_num,jinwei_num = 0,0
# 定义一个字符串接收最后算出来的结果。
num_str = ""
index1,index2 = len(num1) - 1,len(num2) - 1
# 首先两个字符串对应位数相加
while index2 >= 0:
# 两个字符串,加上进位数字
sum_num = int(num1[index1]) + int(num2[index2]) + jinwei_num
# 求出进位数字
jinwei_num = sum_num // 10
# 求出当前为数字
sum_num = sum_num % 10
# 然后写入字符串中
num_str = str(sum_num) + num_str
# 将当前为数字重新定义为零
sum_num = 0
# 指针遍历
index2 -= 1
index1 -= 1
# num2已经遍历完成,此时num1可能已经遍历完成,
# 但也可能还有很多。需要继续遍历相加。
# 这里的代码和上边的那个相同,自己看下
while index1 >= 0:
sum_num = 0
sum_num = int(num1[index1]) + jinwei_num
jinwei_num = sum_num // 10
sum_num = sum_num % 10
num_str = str(sum_num) + num_str
index1 -= 1
# 这里判断进位是否为零,不为零的话要加上进位数字。
if jinwei_num != 0:
num_str = str(jinwei_num) + num_str
return num_str

A = Solution()
A.multiply("1","1")