8000 update · leetcoders/LeetCode@5f2820f · GitHub
[go: up one dir, main page]

Skip to content

Commit 5f2820f

Browse files
author
applewjg
committed
update
Change-Id: I413462e3f26040800a2f90b5b12c2f7f3877e3f9
1 parent a784ad4 commit 5f2820f

File tree

1 file changed

+26
-28
lines changed

1 file changed

+26
-28
lines changed

DivideTwoIntegers.h

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,13 @@
1313

1414
class Solution {
1515
public:
16-
// Solution 1. Bottom->Up
17-
int divide(int dividend, int divisor) {
18-
assert(divisor != 0);
19-
bool flag = dividend > 0 && divisor < 0 ||
20-
dividend < 0 && divisor > 0;
21-
long long dividendll = abs((long long)dividend);
22-
long long divisorll = abs((long long)divisor);
23-
int res = 0;
24-
while (dividendll >= divisorll)
25-
{
26-
long long div = divisorll;
27-
int quot = 1;
28-
while ((div << 1) <= dividendll) {
29-
div <<= 1;
30-
quot <<= 1;
31-
}
32-
dividendll -= div;
33-
res += quot;
34-
}
35-
return flag ? -res : res;
36-
}
37-
// Solution 2. Top->Down
38-
int divide_2(int dividend, int divisor) {
16+
//Top -> Down
17+
int divide_1(int dividend, int divisor) {
3918
assert(divisor != 0);
40-
bool flag = dividend > 0 && divisor < 0 ||
41-
dividend < 0 && divisor > 0;
19+
bool flag = (dividend < 0) ^ (divisor < 0);
4220
long long dividendll = abs((long long)dividend);
4321
long long divisorll = abs((long long)divisor);
44-
int res = 0;
22+
long long res = 0;
4523
long long d = divisorll, q = 1;
4624
while ((d << 1) <= dividendll) {
4725
d <<= 1;
@@ -55,6 +33,26 @@ class Solution {
5533
d >>= 1;
5634
q >>= 1;
5735
}
58-
return flag ? -res : res;
36+
if (flag == true) res = -res;
37+
if (res > INT_MAX) return INT_MAX;
38+
return res;
39+
}
40+
//bottom -> up
41+
int divide(int dividend, int divisor) {
42+
assert(divisor != 0);
43+
bool flag = (dividend < 0) ^ (divisor < 0);
44+
long long Dividend = abs((long long)dividend);
45+
long long Divisor = abs((long long)divisor);
46+
long long res = 0;
47+
while (Dividend >= Divisor) {
48+
long long c = Divisor;
49+
for (int i = 0; (c << i) <= Dividend; ++i) {
50+
Dividend -= (c << i);
51+
res += (1 << i);
52+
}
53+
}
54+
if (flag == true) res = -res;
55+
if (res > INT_MAX) return INT_MAX;
56+
return res;
5957
}
60-
};
58+
};

0 commit comments

Comments
 (0)
0