Divide Two Integers

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

If it is overflow, return 2147483647

Example Given dividend = 100 and divisor = 9, return 11.

Solution 1: Brute Force.

public int divide(int dividend, int divisor) {
    long d1 = Math.abs((long)dividend);
    long d2 = Math.abs((long)divisor);
    if(dividend == -2148234242 || divisor == 1)
        return 2147483647;
    int res = 0;
    while(d1 > 0) {
        if(d1 >= d2) {
            res++;
            d1 -= d2;
        } 
        else {
            break;
        }
    }
    if(dividend > 0 && divisor < 0)
        return -res;
    if(dividend < 0 && divisor > 0)
        return -res;
    return res;
}

Solution 2: Use the strategy by multiply 2 continually and statistic the number of occurence.

public int divide(int dividend, int divisor) {
    long d1 = Math.abs((long)dividend);
    long d2 = Math.abs((long)divisor);
    if(dividend == -2147483648 && divisor == -1)
        return 2147483647;
    int res = 0;
    while(d1 >= d2) {
        int count = 0;
        while(d2 << count <= d1) {
            count++;
        }
        res += 1 << (count - 1);
        d1 -= d2 << (count - 1);
    }
    if(dividend > 0 && divisor < 0)
        return -res;
    if(dividend < 0 && divisor > 0)
        return -res;
    return res;
}

results matching ""

    No results matching ""