题目: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