大数相乘算法经常遇到的题吧,按照用笔做乘法的顺序去做大数相乘就好了,就是处理起来比较麻烦,也只是麻烦而已
class Solution {
public:
string multiply(string num1, string num2) {
if (num1 == "0" || num2 =="0") return "0";
int n1 = num1.size();
int n2 = num2.size();
string result(n1+n2, '0');
int tmp = 0; int l;
for (int i = n1 - 1; i >= 0; i--)
{
for (int j = n2 - 1; j >= 0; j--)
{
tmp += ((num2[j] -'0')*(num1[i] - '0'));
l = n1 - 1 - i + n2 - 1 - j;
int u = (result[l]-'0') + tmp% 10;
result[l] = (char)(u %10+'0');
tmp /= 10;
tmp += u / 10;
}
l = n1 - 1 - i + n2;
while (tmp != 0)
{
int u = (result[l]-'0') + (tmp% 10);
result[l] = (char)(u %10+'0');
tmp /= 10;
tmp += u / 10;
l++;
}
tmp = 0;
}
result = result.substr(0, l);
reverse(result.begin(), result.end());
return result;
}
};