-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path29.cpp
32 lines (32 loc) · 1005 Bytes
/
29.cpp
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
class Solution {
// Runtime: 0 ms, faster than 100.00% of C++ online submissions for Divide Two
// Integers. Memory Usage: 8.2 MB, less than 47.58% of C++ online submissions
// for Divide Two Integers.
public:
int divide(int dividend, int divisor) {
if (divisor == 0)
return 0x7fffffff;
if (dividend == 0)
return 0;
auto res = [](long long dividend, long long divisor)
-> long long {
auto res = 0ll;
while (dividend >= divisor) {
auto level = 1ll;
for (; (divisor << level) < dividend; ++level)
;
res += 1ll << (level - 1ll);
dividend -= divisor << (level - 1ll);
}
return res;
}(abs((long long)dividend), abs((long long)divisor)) *
((dividend > 0 and divisor > 0) or (dividend < 0 and divisor < 0)
? 1
: -1);
if (res > 2147483647ll)
return 0x7fffffff;
if (res < -2147483648ll)
return -2146483648;
return res;
}
};