-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmultiplystring.cpp
More file actions
76 lines (76 loc) · 1.87 KB
/
multiplystring.cpp
File metadata and controls
76 lines (76 loc) · 1.87 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class Solution {
public:
string multiply(string num1, string num2) {
if (num1.empty() || num2.empty())
{
return num1 + num2;
}
int flag1 = 0, flag2 = 0;
if (num1[0] == '-')
{
flag1 = 1;
num1 = num1.substr(1);
}
if (num2[0] == '-')
{
flag2 = 1;
num2 = num2.substr(1);
}
int len1 = num1.length();
int len2 = num2.length();
int len = len1 + len2 + 1;
vector<int> ret(len, 0);
for (int i = len1-1; i >=0; i--)
{
vector<int>tmp(len, 0);
int nn1 = num1[i] - '0';
for (int j = len2-1; j >=0; j--)
{
int nn2 = num2[j] - '0';
auto r = nn1*nn2;
tmp[len1 -1 -i + len2-1-j] += nn1*nn2 % 10;
tmp[len1 - 1 - i + len2 - 1 - j+1] += nn1*nn2 / 10;
}
addvector(tmp, ret);
}
string s;
int index = ret.size()-1;
for (; index >= 0; index--)
{
if (ret[index] != 0)
{
break;
}
}
if (index == -1)
{
s += '0';
return s;
}
for (int i = index; i >= 0; i--)
{
s +=(ret[i] + '0');
}
if (flag1 + flag2 == 1)
{
s.insert(0, 1, '-');
}
return s;
}
private:
void addvector(vector<int>tmp, vector<int>&ret)
{
int flag = 0;
for (int i = 0; i < ret.size(); i++)
{
ret[i] += tmp[i] + flag;
flag = 0;
if (ret[i] >= 10)
{
flag = ret[i]/10;
ret[i] = ret[i]%10;
}
}
return;
}
};