Leetcode 29. Divide Two Integers (Medium) (cpp)
Tag: Math, Binary Search
Difficulty: Medium
/*
29. Divide Two Integers (Medium)
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
*/
class Solution {
public:
int divide(int dividend, int divisor) {
if (!dividend) {
return 0;
}
if (!divisor || dividend == INT_MIN && divisor == -1) {
return INT_MAX;
}
int sign = (dividend > 0 ^ divisor > 0) ? -1 : 1;
long dd = labs((long)dividend), dr = labs((long)divisor);
if (dd < dr) {
return 0;
}
int h = 0;
long t = dr;
while (t <= dd) {
t <<= 1;
h++;
}
long ret = 1 << --h;
dd -= (t >>= 1);
while (dd >= dr) {
while (t > dd){
t >>= 1;
h--;
}
ret |= 1 << h;
dd -= t;
}
return sign < 0 ? -ret : ret;
}
};