原题:
解决方法:
代码:
Given two non-negative integers num1
and num2
represented as strings, return the product ofnum1
and num2
.
Note:
- The length of both
num1
andnum2
is < 110. - Both
num1
andnum2
contains only digits0-9
. - Both
num1
andnum2
does not contain any leading zero. - You must not use any built-in BigInteger library or convert the inputs to integer directly.
解决方法:
求两个数的乘积,结果为两者长度之和。首先用一个数组来保存个位的数。
对乘数和被乘数,都从个位开始,计算各自的乘积保存到对应的位上。
拼结果字符串时,需要将前面的0都给过滤掉,同时返回结果别为空即可。
代码:
string multiply(string num1, string num2) {
if (num1.empty() || num2.empty())
return "";
int n = num1.size(), m = num2.size();
vector<int> nums(n+m, 0);
for(int i = 0; i < n; i++){
int a = num1[n - i - 1] - '0';
int carry = 0;
for(int j = 0; j < m;j++){
int b = num2[m - j - 1] - '0';
carry += nums[i+j] + a*b;
nums[i+j] = carry % 10;
carry /= 10;
}
if (carry)
nums[i + m] += carry;
}
string res;
bool start = true;
for(int i = nums.size() - 1; i >=0; i--){
if (start && nums[i] == 0)
continue;
start = false;
res.push_back('0' + nums[i]);
}
return res.empty() ? "0" : res;
}