字符串整数乘法,考虑按位相乘,就是小学时用笔演算的方法,从两个数的个位开始算,i,j,两两相乘,更新结果对应位置的数字,注意更新的数字不止与i,j的乘积有关(cur),还与这位之前算的数字(digit)和上次计算的十位(last)有关,更新公式是digit = (digit+cur%10+last)%10,完事还要更新新的last。另外还有个小坑是进位到最后可能会多出来一位,所以索性在num1和num2前面各加个0。
class Solution {
public:
string multiply(string num1, string num2) {
num1 = "0"+num1;
num2 = "0"+num2;
int n1 = num1.size(), n2 = num2.size();
string res(n1+n2+2, '0');
int last = 0;
for (int i=0;i<n2;++i) {
for (int j=0;j<n1;++j) {
int cur = (num2[n2-1-i]-'0')*(num1[n1-1-j]-'0');
int digit = res[n1+n2+1-i-j]-'0';
res[n1+n2+1-i-j] = '0'+(last+(cur%10)+digit)%10;
last = cur/10+(last+(cur%10)+digit)/10;
}
last = 0;
}
int i=0;
for (;i<res.size()-1;++i) {
if (res[i]!='0') break;
}
return res.substr(i, res.size());
}
};