思路:num2先从低位到高位,依次与num1的每一位相乘,相乘的积取低位数,高位进制,
然后每行再对应相加求和
class Solution {
public:
string multiply(string num1, string num2) {
int n1 = num1.size();
int n2 = num2.size();
reverse(num1.begin(), num1.end());//逆序字符串,从低位到高位相乘
reverse(num2.begin(), num2.end());
string str(n1 + n2, '0');
int next = 0;//设置进位数
for (size_t i = 0; i < n1; i++)
{
next = 0;
for (size_t j = 0; j < n2; j++)
{
//每次相乘得到低位数都与上一行对应位数相加
int sum = str[i + j] - '0' + (num1[i] - '0') * (num2[j] - '0') + next;
str[i + j ] = sum % 10+'0';
next = sum / 10;
}
if (next)
str[i + n2] = next + '0';
}
//消去高位'0'
if (str[n1 + n2-1] == '0')
str.erase(n1 + n2-1);
reverse(str.begin(), str.end());
return str;
}
};