0%

leetcode.43.字符串相乘

字符串相乘


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


十进制错位相乘

思路分析



代码实现

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class Solution {
public:
string multiply(string num1, string num2) {
if (num1.length() < num2.length()) {
swap(num1,num2);
}
//if (num2 == "0") {
// return 0;
//}
int i, j;
string strvalue = "";
vector<string> v(10);
v[0] = "";
strvalue = num2;
reverse(strvalue.begin(), strvalue.end());
v[1] = strvalue;
int forward = 0;
int value = 0;

for (i = 2; i < 10; i++) {
forward = 0;
strvalue = "";
for (j = num2.length() - 1; j >= 0; j--) {
value = (i * (num2[j] - '0') + forward);
forward = value / 10;
strvalue.insert(strvalue.begin(),value%10+'0');
}
if (forward != 0) { strvalue.insert(strvalue.begin(), forward + '0'); }
reverse(strvalue.begin(),strvalue.end());
v[i] = strvalue;
}
reverse(num1.begin(), num1.end());
string ans(num1.length() + num2.length(),'0');
for (i = 0; i < num1.length(); i++) {
strvalue = v[num1[i] - '0'];
forward = 0;
for (j = 0; j < strvalue.length(); j++) {
value = (ans[i + j] - '0' + strvalue[j] - '0') + forward;
forward = value / 10;
ans[i + j] = value % 10 + '0';
}
if (forward != 0) {
ans[i + j] = forward + '0';
}
}
while (ans.length() > 1 && ans[ans.length() - 1] == '0') {
ans.erase(ans.begin() + ans.length() - 1);
}
reverse(ans.begin(),ans.end());

return ans;
}
};