43. 字符串相乘
字符串加法模拟出字符串乘法
1 | class Solution { |
转成数组存储每一位的计算结果,最后把数组转成字符串
c++中字符串可以直接当作数组 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21class Solution {
public:
string multiply(string num1, string num2) {
if(num1 == "0" || num2 == "0") // 如果有0,返回0
return "0";
int m = num1.size(), n = num2.size();
string ret(m + n, '0'); // 乘积大小不会大于m+n位,具体看题解的证明
for(int i = m - 1; i >= 0; --i)
for(int j = n - 1; j >= 0; --j)
{
int tmp = (num1[i] - '0') * (num2[j] - '0') + ret[i + j + 1] - '0';
ret[i + j + 1] = tmp % 10 + '0'; // 第i位和第j位的两个字符串乘法结果到第i+j+1位上
ret[i + j] = (ret[i + j] - '0' + tmp / 10) + '0'; // 进位存在前一位,由于是从大到小处理,所以不用担心溢出,后续会处理。
}
// 去掉开头0
for(int i = 0; i < m + n; ++i)
if(ret[i] != '0')
return ret.substr(i, m + n - i);
return "0";
}
};