参考:http://fisherlei.blogspot.hk/2012/12/leetcode-multiply-strings.html
模拟手工计算乘法的过程。
class Solution {
public:
string multiply(string num1, string num2) {
const int len1 = num1.size();
const int len2 = num2.size();
if(len1 == 0 || len2 == 0) return "";
string result(len1+len2+1, '0');
std::reverse(num1.begin(), num1.end());
std::reverse(num2.begin(), num2.end());
for(int i=0; i<len1; i++)
{
int dig1 = num1[i]-'0';
int carry = 0;
for(int j=0; j<len2; j++)
{
int dig2 = num2[j]-'0';
int cur = result[i+j]-'0';
result[i+j] = (dig1*dig2 + carry + cur)%10 + '0';
carry = (dig1*dig2 + carry + cur) / 10;
}
if(carry > 0)
result[i+len2] = carry + '0';
}
std::reverse(result.begin(), result.end());
int pos = result.find_first_not_of('0', 0);
if(pos == string::npos)
result = "0";
else
result.erase(0, pos);
return result;
}
};