题目:Divide Two Integers
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
// 思路:使用位运算,和手动计算除法相同。从高位开始除,然后将结果累加。
// 注意点:1.关于符号
// 2.关于边界值,以及达到Integer.MAX_VALUE时的结果处理
// 3.除法计算的次数:被除数为k1位,除数为k2位,那么需要除k1-k2+1次
public int divideOfMy(int dividend, int divisor) {
if(divisor==0) return Integer.MAX_VALUE;
if(divisor==-1 && dividend == Integer.MIN_VALUE)
return Integer.MAX_VALUE;
//get positive values
long div = Math.abs((long)dividend);
long div2 = Math.abs((long)divisor);
int k1=getK(div);
int k2=getK(div2);
int result=0;
long sam=div2;
div2=div2<<(k1-k2);
int count=k1-k2+1;
while(count>0){
result=result<<1;
if(div>=div2){
++result;
div=div-div2;
}
div2=div2>>1;
count--;
}
return ((dividend<0)^(divisor<0))? -result:result;
}
public static int getK(long div){
int count=0;
while(div>0){
++count;
div=div>>1;
}
return count;
}
原文:http://www.cnblogs.com/youyouzaLearn/p/4852923.html