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;
}
网友评论