【Leetcode】43.字串相乘
阿新 • • 發佈:2018-12-21
題目描述:
給定兩個以字串形式表示的非負整數 num1
和 num2
,返回 num1
和 num2
的乘積,它們的乘積也表示為字串形式。
示例 1:
輸入: num1 = "2", num2 = "3"
輸出: "6"
示例 2:
輸入: num1 = "123", num2 = "456"
輸出: "56088"
說明:
num1
和num2
的長度小於110。num1
和num2
只包含數字0-9
。num1
和num2
均不以零開頭,除非是數字 0 本身。- 不能使用任何標準庫的大數型別(比如 BigInteger)或直接將輸入轉換為整數來處理。
解題思路:
本來打算按位相乘然後相加的方式計算的,但是看到了一篇 部落格,感覺這個方法比較簡潔,就套用一下了。
計算步驟: 123 *456 A[0]=3*6=18 A[1] =2*6+3*5=27 A[2] =2*5+3*4+6*1=28 A[3]=1*5+4*2=13 A[4]=1*4=4 A[5]=A[6]=…=0 A[0]=8 A[1]=27+1=28 A[1]=8 A[2]=28+2=30 A[2]=0 A[3]=13+3=16 A[3]=6 A[4]=4+1=5 A[4]=5 A[5]=A[6]=…=0 —>A[4]A[3]A[2]A[1]A[0]=56088
AC程式碼:
class Solution { public: string multiply(string num1, string num2) { int A[300] = {}, high; for (int i = 0; i < num1.size(); ++i) for (int j = 0; j < num2.size(); ++j) A[num1.size() + num2.size() - i - j - 2] += (num1[i] - '0')*(num2[j] - '0'); string ans; for (int i = 0; i < 250; ++i) { A[i + 1] += A[i] / 10, A[i] %= 10; if (A[i]) high = i; } for (int i = high; i >= 0; --i) ans += (A[i] + '0'); if (ans.empty()) ans = "0"; return ans; } //https://blog.csdn.net/Bendaai/article/details/80117872 };