题目描述(Medium)
Given two non-negative integers num1
and num2
represented as strings, return the product of num1
and num2
, also represented as a string.
题目链接
https://leetcode.com/problems/multiply-strings/description/
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.
算法分析
直接将字符转化为数字很浪费空间,因此将字符转为数组保存;m位数字与n位数字相乘,至多有m+n位。
提交代码:
typedef vector<int> bigint;
bigint make_bigint(string s)
{
bigint result;
transform(s.rbegin(), s.rend(), back_inserter(result),
[](char c){return c - '0';});
return result;
}
string to_string(bigint num)
{
string result;
transform(find_if(num.rbegin(), prev(num.rend()),
[](char c) {return c > '\0';}), num.rend(), back_inserter(result),
[](char c){return c + '0';});
return result;
}
bigint operator*(bigint const& x, bigint const& y)
{
bigint result(x.size() + y.size(), 0);
for (int i = 0; i < x.size(); ++i) {
for (int j = 0; j < y.size(); ++j) {
result[i + j] += x[i] * y[j];
result[i + j + 1] += result[i + j] / 10;
result[i + j] = result[i + j] % 10;
}
}
return result;
}
class Solution {
public:
string multiply(string num1, string num2) {
return to_string(make_bigint(num1) * make_bigint(num2));
}
};