您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页29. 两数相除

29. 两数相除

来源:爱够旅游网

代码:

class Solution {
    public int divide(int dividend, int divisor) {
        //转成long型,避免计算时整型溢出
        long dividend1 = dividend, divisor1 = divisor;
        long count = 0;
        int flag = 1;
        //将除数和被除数都转为非负数,方便计算
        if (dividend1 < 0) {
            dividend1 = -dividend1;
            flag = -flag;
        }
        if (divisor1 < 0) {
            divisor1 = -divisor1;
            flag = -flag;
        }
        long result = divide(dividend1, divisor1);
        result *= flag;
        return result > Integer.MAX_VALUE || result < Integer.MIN_VALUE ? Integer.MAX_VALUE : (int) result;
    }

    private long divide(long dividend, long divisor) {
        //终止条件
        if (dividend < divisor)
            return 0;
        //倍增的结果
        long sum = divisor;
        //部分 商
        long count = 1;
        while (dividend >= sum) {
            sum <<= 1;
            count <<= 1;
        }
        //此时sum是大于dividend的,回退一步
        sum >>= 1;
        count >>= 1;
        //返回部分商和未包括的被除数
        return count + divide(dividend - sum, divisor);
    }
}

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务