43. Multiply Strings
这道题要做的是将两个写成了string的数字相乘,思路很清晰,就是手算乘法的式子。我的想法是把这个过程模块化,写作一个字符乘以一个string和错位相加两个部分,可能实力还有欠缺写的不是很简洁。
class Solution {
public:
string multiply(string num1, string num2) {
if (num1=="0"||num2=="0") return "0";
string res = "", pdt = "";
int len1 = num1.size(), len2 = num2.size();
for (int i = len1-1; i >= 0; i--){
pdt = strProduct(num1[i],num2);
for (int k = 0; k < len1-1-i; k++) pdt+="0";
res = strAdd(res, pdt);
}
return res;
}
string strProduct(char num1, string num2){
string res = "";
int len = num2.size();
int base = 0, carry = 0;
for (int i = len-1; i >= 0; i--){
base = (num1-'0')*(num2[i]-'0')+carry;
res += to_string(base%10);
carry = base/10;
}
if (carry!=0) res+=to_string(carry);
reverse(res.begin(), res.end());
return res;
}
string strAdd(string num1, string num2){
// num1 is shorter than num2
string res = "";
int len1 = num1.size(), len2 = num2.size();
int base = 0, carry = 0;
int i = len1-1, j = len2-1;
while (i>=0 && j>=0){
base = (num1[i]-'0')+(num2[j]-'0')+carry;
res+=to_string(base%10);
carry = base/10;
i--;j--;
}
while (j>=0){
base = num2[j]-'0'+carry;
res+=to_string(base%10);
carry = base/10;
j--;
}
if (carry!=0) res+=to_string(carry);
reverse(res.begin(), res.end());
return res;
}
};