题目:
Given two numbers represented as strings, return multiplication of the numbers as a string.
Note:
- The numbers can be arbitrarily large and are non-negative.
- Converting the input string to integer is NOT allowed.
- You should NOT use internal library such as BigInteger.
Subscribe to see which companies asked this question
思路:
首先将两个字符串翻转,那么mul[i + j] += (num1[i] - '0') * (num2[j] - '0');,然后转换为string输出。
代码:
class Solution {
public:
string multiply(string num1, string num2) {
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int m = num1.size(), n = num2.size();
vector<int> mul(m + n, 0);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
mul[i + j] += (num1[i] - '0') * (num2[j] - '0');
for (int i = 0; i < m + n - 1; i++)
{
int remainder = mul[i] % 10, quotients = mul[i] / 10;
mul[i] = remainder;
mul[i + 1] += quotients;
}
string ans("");
int i = m + n - 1;
while ( i >= 0 && mul[i] == 0) i-- ;
if (i == -1)return "0";
else
for (int k = i; k >= 0; k--)
ans += mul[k] + '0';
return ans;
}
};