Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
For the function int divide(int dividend, int divisor), overflow will have happen when
1) divisor is 0
2) dividend is -INT_MAX -1 and divisor is -1. for the range of 32 bit integer is from −(231) to 231 − 1
1) divisor is 0
2) dividend is -INT_MAX -1 and divisor is -1. for the range of 32 bit integer is from −(231) to 231 − 1
class Solution { public: int divide(int dividend, int divisor) { if(0 == divisor) return INT_MAX; if(-1 == divisor && dividend == -INT_MAX - 1) return INT_MAX; long longDividend = abs((long)dividend); long longDivisor = abs((long)divisor); long div = longDividend; long res = 0; while(div >= longDivisor ) { int i =0; while(div >= longDivisor) { i++; div >>= 1; } if(i == 0) i = 1; res += (1 << (i-1)); div = longDividend - (longDivisor << (i-1)); longDividend = div; } return ((dividend<0)^(divisor<0)?-1:1)* res; } };