29. 两数相除

一 题目:

二 思路:

采用二分法的思想,dividend每次减去2^n个divisor(尽可能多),同时reslut每次加2^n

三 代码:

class Solution {
    public int divide(int dividend, int divisor) {
        if (dividend==Integer.MIN_VALUE&&divisor==-1){
            return Integer.MAX_VALUE;
        }

        //判断符号是否一致
        //这里不能用两者的乘法做运算,因为可能会移除变负数;
        boolean same= (dividend>0&&divisor>0||dividend<0&&divisor<0)?true:false;

        // 将被除数和除数都转成正数或负数进行计算
        // 由于在Java中,当t=Integer.MIN_VALUE时(t取相反数依旧是它本身)此时可能存在越界问题,因此都用负数进行计算
        dividend=-Math.abs(dividend);
        divisor=-Math.abs(divisor);
        int res=0;
        while (dividend<=divisor){
            int temp=divisor;
            //记录有多少个divisor
            int count=1;
            //dividend每次减去2^n个divisor(尽可能多),同时reslut每次加2^n
            while (dividend-temp<=temp){
                //temp*2,count*2;
                temp=temp<<1;
                count=count<<1;
            }
            //减去2的n次方个divisor
            dividend=dividend-temp;
            res=res+count;
        }
        return same? res:-res;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 更多精彩内容,请关注【力扣中等题】。 题目 难度:★★☆☆☆类型:数学 给定两个整数,被除数 dividend 和...
    玖月晴阅读 7,493评论 0 0
  • 自己解法 自己的解法,想着是不能乘除和mod的话,就只有用加减运算了,于是写了个循环减除法的解法,这个解法显然没通...
    justonemoretry阅读 1,131评论 0 0
  • 题目描述 29. 两数相除 给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、...
    被JS支配的秃头少年阅读 1,878评论 0 0
  • 29.两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和...
    不爱去冒险的少年y阅读 2,773评论 0 0
  • 一、题目 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mo...
    爱情小傻蛋阅读 1,885评论 0 0