美文网首页
LeetCode-29: Divide Two Integers

LeetCode-29: Divide Two Integers

作者: Wide_Star | 来源:发表于2018-05-23 22:08 被阅读0次

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

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));

    }

}

每天进步一点点,加油


相关文章

网友评论

      本文标题:LeetCode-29: Divide Two Integers

      本文链接:https://www.haomeiwen.com/subject/pbbdjftx.html