LeetCode-29: Divide Two Integers

2018-05-23  本文已影响0人  Wide_Star

(两个整数相除,不用乘除取余算术符)

Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT.


以下是java实现代码(二分法思想)


package algorithm;

public class DivideTest {
    public int divide(int dividend,int divisor) {
        boolean negative= dividend<0 != divisor<0;
        if(divisor==0) return Integer.MAX_VALUE;
        if(dividend==0||dividend<divisor) {
            return 0;
        }
        if(dividend<0) dividend=-dividend;
        if(divisor<0) divisor=-divisor;
        long res=divideLong(dividend, divisor);
        int ans;
        if(res>Integer.MAX_VALUE) {
            ans=negative?Integer.MAX_VALUE:Integer.MIN_VALUE;
        }else {
            ans=(int)(negative?-res:res);
        }
        return ans;
    }
    public long divideLong(long dividend,long divisor) {
        if(dividend <divisor) {
            return 0;
        }
        long sum=divisor;
        long res=1;
        while(sum<<1 <= dividend) {
            sum<<=1;
            res<<= 1;
        }
        return res+divideLong(dividend-sum,divisor);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(new DivideTest().divide(100, 15));

    }

}

每天进步一点点,加油


上一篇 下一篇

猜你喜欢

热点阅读