字串乘乙個數 兩個字串的乘法 演算法題

2021-10-14 17:44:01 字數 1671 閱讀 3810

【知識點】字串,大數相乘

問題描述如下:

輸入兩個字串(只含有數字),實現由這兩個字串構成的對應整數的乘積,結果返回該乘積的字串形式。

例子:輸入:

56 123

輸出:解題思路:

該問題並不難理解,實現兩個數的乘法即可,由於沒有給定兩個字串的長度(可能非常長),此時是不能直接將兩個字串轉化成整數型,然後乘積再轉化成字串型別的。在大型計算機中,受到資料型別的長度限制,很多大數之間的計算都是以字串的形式顯示出來。

問題求解起來並不複雜,按照我們人類計算乘法的習慣計算即可,中間需要用到字串相加和字串和單個字元的相乘,分別寫出子函式。此時問題問題就轉化成如果計算字串的相加和字串和單個字元的相乘問題。注意進製標誌位,程式實現應該不難。

def func(s1, s2):

# 實現兩個字串的乘法,結果返回新的字串形式

n1, n2 = len(s1), len(s2)

ans = ''

for j in range(n2 - 1, -1, -1):

temp = strmultiply(s1, s2[j]) + '0' * (n2 - 1 - j)

ans = stradd(ans, temp)

return ans

def strmultiply(str1, char):

# 實現字串和單個字元相乘,結果返回新的字串形式

carry = 0

res = ''

n = len(str1)

for i in range(n - 1, -1, -1):

temp = int(str1[i]) * int(char) + carry

carry = temp // 10

residue = temp % 10

res = str(residue) + res

res = (str(carry) + res) if carry else res

return res

def stradd(str1, str2):

# 兩個字串實現加法,結果返回字串

if len(str1) < len(str2):

str1, str2 = str2, str1 # 字串 str1 比較長

n1, n2 = len(str1), len(str2)

str2 = '0' * (n1 - n2) + str2

carry = 0 # 進製標誌位

res = ''

for i in range(n1 - 1, -1, -1):

temp = int(str1[i]) + int(str2[i]) + carry

carry = temp // 10

residue = temp % 10

res = str(residue) + res

res = (str(carry) + res) if carry else res

return res

if __name__ == '__main__':

str1, str2 = map(str, input().strip().split())

res = func(str1, str2)

print(res)

連線兩個字串

include include void main char lianjie char a 30 char b 30 原型 extern char strcat char dest,char src 用法 include 功能 把src所指字串新增到dest結尾處 覆蓋dest結尾處的 0 並新增 ...

交換兩個字串

交換兩個字串,原來的字串分別為 學生 和 好 字串輸出顯示為 學生好 交換後輸出顯示為 好學生 include using namespace std int main char c1 5 學生 char c2 3 好 char m,n,t m c1 n c2 cout 交換前 m n n t co...

兩個字串相乘

先附上一張演算法圖 解釋 123 456 首先拿出1和456相乘,儲存到陣列1 2 3 的位置,然後拿出2和456相乘2 3 4的位置,依次類推,直到第乙個字串遍歷完 然後將他們相加,依次存到陣列中 實現如下 int j 0 int resindex 0 for int i 0 i然後再考慮進製,需...