美文网首页
29. 两数相除

29. 两数相除

作者: 名字是乱打的 | 来源:发表于2022-01-09 19:42 被阅读0次

    一 题目:

    二 思路:

    采用二分法的思想,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;
        }
    }
    

    相关文章

      网友评论

          本文标题:29. 两数相除

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