Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Solution:
class Solution {
private:
static const int MAX_INT = 0x7fffffff;
static const int MIN_INT = 0x80000000;
public:
int divide(int dividend, int divisor) {
if(!divisor) return MAX_INT;
if(divisor == MIN_INT)
{
if(dividend == MIN_INT) return 1;
else return 0;
}
int flag1 = 1, flag2 = 1, res = 0;
if(dividend == MIN_INT)
{
if(divisor == -1) return MAX_INT;
if(divisor == 1) return MIN_INT;
if(divisor > 0) dividend += divisor;
else dividend -= divisor;
res += 1;
}
if(dividend < 0)
{
dividend = 0 - dividend;
flag1 = -1;
}
if(divisor < 0)
{
divisor = 0 - divisor;
flag2 = -1;
}
int top = 0;
while(divisor << top > 0 && divisor << top <= dividend) top++;
for(int i = --top; i >= 0; --i)
{
if(dividend >= divisor << i)
{
res += 1 << i;
dividend -= divisor << i;
}
}
return (flag1 == flag2) ? res : 0 - res;
}
};