模拟乘法竖式计算,
有个trick是用一维数组vector<int> result(a.size()+b.size(), 0)累计每个位上的值(可以大于10),最后再做进位。
代码:
class Solution
{
public:
string multiply(string a, string b)
{
vector<int> result(a.size()+b.size(), 0);
string ret;
for (size_t i = 0; i < a.size(); ++ i)
{
for (size_t j = 0; j < b.size(); ++ j)
{
result[i+j+1] += ((a[i]-48)*(b[j]-48));
}
}
for (int i=a.size()+b.size()-1; i >= 0; -- i)
{
if (i > 0)
{
result[i-1] += result[i] / 10; // carry
}
ret.insert(ret.begin(), result[i]%10+48);
}
ret = ret[0]=='0'? ret.substr(1): ret;
return (a=="0"||b=="0")? "0": ret;
}
};