-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathDivide_Two_Integers.js
45 lines (45 loc) · 1.07 KB
/
Divide_Two_Integers.js
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
/**
* @param {number} dividend
* @param {number} divisor
* @return {number}
*/
var divide = function(dividend, divisor) {
var MAX_INT = Math.pow(2, 31) - 1,
MIN_INT = -Math.pow(2, 31),
result = 0,
newDividend = Math.abs(dividend),
newDivisor = Math.abs(divisor),
flag;
if (newDividend < newDivisor) {
return 0;
}
if (dividend >= 0 && divisor > 0 || dividend <= 0 && divisor < 0) {
flag = 1;
} else {
flag = -1;
}
while (newDividend >= newDivisor) {
var temp = newDivisor,
i = 0;
while (newDividend >= temp << 1) {
if ((temp << 1) <= 0) {
break;
}
temp = temp << 1;
i++;
if (flag > 0 && i > 29) {
return MAX_INT;
}
if (flag < 0 && i > 30) {
return MIN_INT;
}
}
newDividend -= temp;
result += Math.pow(2, i);
}
if (flag > 0) {
return result;
} else {
return -result;
}
};