29. Divide Two Integers

来源:互联网 发布:制冷系统理论计算软件 编辑:程序博客网 时间:2024/06/18 09:24

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==0)return 0;
        boolean isNeg=true;
        if(dividend>0&&divisor>0||dividend<0&&divisor<0)
        {
            isNeg=false;
        }
        long dividendL=Math.abs((long)dividend);
        long divisorL=Math.abs((long)divisor);
        if(dividendL<divisorL)return 0;
        long answer=0;
        
        while(dividendL>=divisorL)
        {
            long a=divisorL;
            long m=1;
            while(a<<2<dividendL)
            {
                a<<=2;
                m<<=2;
            }
            answer+=m;
            dividendL-=a;    
        }
        if(answer>Integer.MAX_VALUE&&!isNeg)return Integer.MAX_VALUE;
        if(-answer<Integer.MIN_VALUE&&isNeg)return Integer.MIN_VALUE;
        
        if(isNeg)
        {
            answer=-answer;
        }
        return (int) answer;
    }
}


重点一:用long类型来处理溢出问题且注意最大值和最小值的情况

重点二:用减法处理除法时,用2次幂做基而非1作基降低复杂度


原创粉丝点击