Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
public int divide(int dividend, int divisor) { if (divisor == 0) { return Integer.MAX_VALUE; } // 转为long类型,方便识别溢出 long left = dividend > 0 ? dividend : -(long) dividend; long right = divisor > 0 ? divisor : -(long) divisor; long result = 0; while (true) { long subRes = 0; long div = right; // 分别跟divisor的1倍、2倍、4倍...比较 while (div <= left) { if(subRes == 0){ subRes = 1; } else { subRes = subRes << 1; } div = div << 1; } if (div == left) { // 如果左值恰好是divisor的2^n倍 result += subRes; break; } else if(subRes == 0){ // 如果左值比右值还小,则直接退出 break; } else { // 计算剩余部分,赋予左值 result += subRes; left -= div>>1; } } // 符号和溢出判断 if (dividend < 0 && divisor > 0 || dividend > 0 && divisor < 0) { return -(int) result; } else if (result > Integer.MAX_VALUE) { return Integer.MAX_VALUE; } else { return (int) result; } }
