Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
Solution:
public class Solution {
public int divide(int dividend, int divisor) {
if(divisor==0 || (dividend==Integer.MIN_VALUE && divisor==-1)) return Integer.MAX_VALUE;
int sign = (dividend<0)^(divisor<0) ? -1 : 1;
long dvd = dividend<0 ? -(long)dividend : dividend;
long dvs = divisor<0 ? -(long)divisor : divisor;
int ans = 0;
while(dvd>=dvs){
long mult = 1;
long tmp = dvs;
while(dvd>=(tmp<<1)){
tmp <<= 1;
mult <<= 1;
}
dvd -= tmp;
ans += mult;
}
return sign==-1 ? -ans : ans;
}
}