1. 程式人生 > 實用技巧 >24字串相乘

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")