美文网首页
Divide Two Integers

Divide Two Integers

作者: 我的轩辕 | 来源:发表于2017-05-04 10:31 被阅读56次

    Divide two integers without using multiplication, division and mod operator.
    思路是:用位运算,先找出小于等于被除数的除数最大值,然后减
    例如:24/5

    • 先找到小于等于被除数的最大值 20
    • 24/5 ==20/5 +4/5 所以商为4,余数为5
     public int divide(int dividend, int divisor) {
            int sign=1; //用来记录商是否为负数
            if(dividend<0) sign=-sign;
            if(divisor<0) sign=-sign;
    
           //转换除数和被除数为正数
            long temp_dividend=Math.abs((long)dividend);
            long temp_divisor=Math.abs((long)divisor);
    
           //用来记录位移的次数
            int c=1;
            while (temp_dividend>temp_divisor){
                temp_divisor=temp_divisor<<1;
                c=c<<1;
            }
    
            int res=0;
    
            //找出被除后的余数,商 temp_dividend 成余数,res是商
            while (temp_dividend>=Math.abs((long)divisor)){
                while (temp_dividend>=temp_divisor){
                    temp_dividend-=temp_divisor;
                    res+=c;
                }
                temp_divisor=temp_divisor>>1;
                c=c>>1;
            }
            return sign>0?res:-res;
    
        }
    

    相关文章

      网友评论

          本文标题:Divide Two Integers

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