leetcode43.字符串相乘

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2 的乘积,它们的乘积也表示为字符串形式。

注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。


示例:

1
2
输入: num1 = "123", num2 = "456"
输出: "56088"


分析:

1
模板题:高精度乘法

代码

  • C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public:
string multiply(string num1, string num2) {
int n = num1.size(), m = num2.size();
vector<int> A, B;
// 倒着存,方便计算
for (int i = n - 1;i >= 0;i --) A.push_back(num1[i] - '0');
for (int i = m - 1;i >= 0;i --) B.push_back(num2[i] - '0');

vector<int> C(n + m);

for (int i = 0;i < n;i ++)
for (int j = 0;j< m;j ++)
// i + j错位相加
C[i + j] += A[i] * B[j];
// t为进位
for (int i = 0, t = 0;i < C.size();i ++) {
t += C[i];
C[i] = t % 10;
t /= 10;
}

int k = C.size() - 1;
// 去除前导0
while (k > 0 && !C[k]) k --;

string res;
// 保存结果
while (k >= 0) res += C[k --] + '0';

return res;
}
};

[原题链接](43. 字符串相乘 - 力扣(Leetcode))

0%