Divide Two Integers

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;
    }
}
comments powered by Disqus