給定兩個以字符串形式表示的非負整數 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)或直接將輸入轉換爲整數來處理。
思路:把相乘的結果先不進位,等將所有相乘的結果相加後在進行進位即可
class Solution {
public:
string multiply(string num1, string num2) {
if(num1 == "0" || num2 == "0") {
return "0";
}
int n1 = num1.size();
int n2 = num2.size();
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int n3 = n1+n2;
int* res = new int[n1+ n2]{0};
for (int i=0;i<n2;i++){
for (int j=0;j<n1;j++){
res[i+j] += (num2[i]-'0')*(num1[j]-'0');
}
}
for (int i=0;i<n1+n2;i++){
if(res[i]>9){
int a = res[i]%10;
int b = res[i]/10;
res[i] = a;
res[i+1] += b;
}
}
string result = "";
int flag;
if (res[n1+n2-1]==0){
flag = n1+n2-1;
} else {
flag = n1+n2;
}
for (int i = 0;i<flag;i++){
result += (res[i] + '0');
}
reverse(result.begin(), result.end());
return result;
}
};