LeetCode-29: Divide Two Integers

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

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

    }

}

每天进步一点点,加油


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容