標籤:
題目描述:
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
解題思路:
把除數表示為:dividend = 2^i * divisor + 2^(i-1) * divisor + ... + 2^0 * divisor。這樣一來,我們所求的商就是各係數之和了,而每個係數都可以通過移位操作獲得。
詳細解說請參考:http://blog.csdn.net/whuwangyi/article/details/40995863
代碼如下:
public class Solution { public int divide(int dividend, int divisor) {boolean flag = (dividend > 0 && divisor > 0)|| (dividend < 0 && divisor < 0);long absDividend = Math.abs((long) dividend);long absDivisor = Math.abs((long) divisor);long quotient = dividePositive(absDividend, absDivisor);if (flag && quotient > Integer.MAX_VALUE)return Integer.MAX_VALUE;return flag ? (int) quotient : -(int) quotient;}public long dividePositive(long dividend, long divisor) {if (dividend < divisor)return 0;long quotient = 1;long originalDivisor = divisor;while (dividend >= (divisor << 1)) {quotient <<= 1;divisor <<= 1;}return quotient + dividePositive(dividend - divisor, originalDivisor);}}
Java [leetcode 29]Divide Two Integers