题目:
Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and num2
, also represented as a string.
Example 1:
Input: num1 = "2", num2 = "3" Output: "6"
Example 2:
Input: num1 = "123", num2 = "456" Output: "56088"
Note:
- The length of both
num1
andnum2
is < 110. - Both
num1
andnum2
contain only digits0-9
. - Both
num1
andnum2
do not contain any leading zero, except the number 0 itself. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
算法解析:
Start from right to left, perform multiplication on every pair of digits, and add them together. Let's draw the process! From the following draft, we can immediately conclude:
`num1[i] * num2[j]` will be placed at indices `[i + j`, `i + j + 1]`
class Solution {
public:
string multiply(string num1, string num2) {
int m = num1.length();
int n = num2.length();
string res(m + n,'0');
for(int i = m - 1; i >= 0; i--)
{
for(int j = n - 1; j>= 0; j--)
{
int sum = (num1[i] - '0') * (num2[j] - '0') + (res[i + j + 1] - '0');
res[i + j] += sum / 10;
res[i + j + 1] = sum % 10 + '0';
}
}
for(int k = 0; k < m + n ; k++)
{
if(res[k] != '0')
return res.substr(k);
}
return "0";
}
};