forked from xingyuzhe/javascript-algorithm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path43-multiply-strings.js
More file actions
72 lines (52 loc) · 1.49 KB
/
Copy path43-multiply-strings.js
File metadata and controls
72 lines (52 loc) · 1.49 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
function sumString(num1, num2) {
if (!num1 && !num2) return '0'
if (!num1) return num2
if (!num2) return num1
let carry = 0
let resStack = []
let leftStack = num1.split('')
let rightStack = num2.split('')
while (leftStack.length || rightStack.length) {
let leftVal = leftStack.length ? parseInt(leftStack.pop(), 10) : 0
let rightVal = rightStack.length ? parseInt(rightStack.pop(), 10) : 0
let sum = leftVal + rightVal + carry
carry = Math.floor(sum / 10)
resStack.push(sum % 10)
}
if (carry > 0) {
resStack.push(carry)
}
return resStack.reverse().join('')
}
function simpleMutiply(num1, num2) {
if (!num1 || !num2 || num1 === '0' || num2 === '0') return '0'
num2 = parseInt(num2, 10)
if (!num2) return 0
let carry = 0
let resStack = []
for (let i = num1.length - 1; i > -1; i--) {
let sum = parseInt(num1[i]) * num2 + carry
carry = Math.floor(sum / 10)
resStack.push(sum % 10)
}
if (carry > 0) {
resStack.push(carry)
}
return resStack.reverse().join('')
}
function patchZero(num1, count) {
if (!num1) return 0
for (let i = 0; i < count; i++) {
if (parseInt(num1, 10)) num1 += '0'
}
return num1
}
var multiply = function(num1, num2) {
if (!num1 || !num2 || num1 === '0' || num2 === '0') return '0'
let res = '0'
for (let i = num2.length - 1; i > -1; i--) {
let curSum = simpleMutiply(num1, num2[i])
res = sumString(res, patchZero(curSum, num2.length - i -1))
}
return res
};