zoukankan      html  css  js  c++  java
  • 模拟除法

     public int divide(int dividend, int divisor) {
            //判断符号
            int symbol=(dividend>0&&divisor>0)||(dividend<0&&divisor<0)?1:-1;
            //边界情况直接返回
            if(dividend==Integer.MAX_VALUE&&divisor==1) return dividend;
            if(dividend==Integer.MAX_VALUE&&divisor==-1) return -dividend;
            if(dividend==Integer.MIN_VALUE&&divisor==1) return -dividend;
            if(dividend==Integer.MIN_VALUE&&divisor==-1) return Integer.MAX_VALUE;
            //放到long中避免Integer.MIN_VALUE的绝对值超过int最大值
            long a=Math.abs((long)dividend),b=Math.abs((long)divisor);
            //记录结果
            int result=0;
            int i=0;
            //temp用于保存最初始的b
            long temp=b;
            //当a恰好是2^n,b=2的时候是存在a=temp的,所以需要加上a==temp的情况
            while(a>=b){
                //左移,相当于b*2
                b=b<<1;
                //a<b情况说明到达临界点了
                if(a<b){
                    //计算result的值 2<<(i-1)等价与Math.pow(2,i),如果是i=0的情况说明Math.pow(2,0)就是1
                   result=result+(i>0?2<<(i-1):1); 
                    //获取差值
                   a=a-(b>>1);
                    //重新开始计算
                   b=temp;
                   i=0;
                }else{
                    //累计乘2的次数
                    i++;
                }
            }
            
            return symbol>0?result:-result;
    
    
        }
  • 相关阅读:
    Java Concurrency
    Java Concurrency
    Java Concurrency
    Java Concurrency
    Java Concurrency
    Java Concurrency
    Java Concurrency
    Java Concurrency
    存储的瓶颈(2)
    存储的瓶颈(3)
  • 原文地址:https://www.cnblogs.com/zzq-include/p/13584961.html
Copyright © 2011-2022 走看看