29. Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
solution:
class Solution {
2
public:
3
int divide(int dividend, int divisor) {
4
if (divisor == 0 || dividend == INT_MIN && divisor == -1) return INT_MAX;
5
int sign = (dividend > 0)^(divisor > 0) ? -1 : 1;
6
long long did = labs(dividend), dis = labs(divisor), temp, mul, ans = 0;
7
while (did >= dis) {
8
temp = dis; mul = 1;
9
while (did >= (temp<<1)) {
10
temp <<= 1; mul <<= 1;
11
}
12
did -= temp;
13
ans += mul;
14
}
15
return (sign == 1 ? ans : -ans);
16
}
17
};