29. Divide Two Integers

Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

Solution from Forum

public int divide(int dividend, int divisor) {
    long d1 = dividend, d2 = divisor;
    long result = divideLong(Math.abs(d1), Math.abs(d2));
    result = d1 * d2 < 0 ? -result : result;
    if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE){
        return Integer.MAX_VALUE;
    }
    return (int) result;
}
public long divideLong(long dividend, long divisor) {
    // Return if nothing to divide
    if (dividend < divisor) {
        return 0;
    }

    long sum = divisor;
    long divideTimes = 1;
    while (sum + sum <= dividend) {
        sum += sum;
        divideTimes += divideTimes;
    }

    // Make a recursive call for (devided-sum) and add it to the result
    return divideTimes + divideLong(dividend - sum, divisor);
}

results matching ""

    No results matching ""