两个整数相除

描述

将两个整数相除,要求不使用乘法、除法和 mod 运算符。
如果溢出,返回 2147483647 。

样例

给定被除数 = 100 ,除数 = 9,返回 11。

代码实现

public class Solution {
    /**
     * @param dividend the dividend
     * @param divisor the divisor
     * @return the result
     */
    public int divide(int dividend, int divisor) {
        if (divisor == 0) {
            if (dividend > 0) {
                return Integer.MAX_VALUE;
            } else {
                return Integer.MIN_VALUE;
            }
        }
        if (dividend == 0) {
            return 0;
        }
        if (dividend == Integer.MIN_VALUE && divisor == -1) {
            return Integer.MAX_VALUE;
        }
        long a = Math.abs((long) dividend);
        long b = Math.abs((long) divisor);
        int res = 0;
        while (a >= b) {
            int shift = 0;
            while (a >= (b << shift)) {
                shift++;
            }
            a -= (b << (shift-1));
            res += 1<<(shift-1);
        }
        if ((dividend > 0 && divisor < 0) ||
            (dividend < 0 && divisor > 0)) {
                return -res;
            } else {
                return res;
            }
    }
}

你可能感兴趣的:(两个整数相除)