Divide Two Integers

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)