题目链接:https://leetcode.com/problems/multiply-strings/
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.
思路:用数组来模拟相乘,其结果的长度最多为(len1 + len2),最小为(len1 + len2 -1).并且两个位置i,j的字符相乘的结果的位置是(i+j),应还要考虑进位.
最后还要注意乘积为0的情况,应该将字符串变为只有一个0.
代码如下:
class Solution {
public:
string multiply(string num1, string num2) {
int len1 = num1.size(), len2 = num2.size(), flag = 0;
vector<int> sum(len1+len2-1, 0);
for(int i = len1-1; i >=0; i--)
for(int j = len2-1; j >=0; j--)
sum[i+j] += (num1[i]-'0')*(num2[j]-'0');
for(int i = len1+len2-2; i >=0; i--)
{
int val = (flag + sum[i])%10;
flag = (sum[i] + flag)/10;
sum[i] = val;
}
string ans = flag?to_string(flag):"";
for(auto val: sum) ans += to_string(val);
return ans[0]=='0'?"0":ans;
}
};