Minggu, 10 Februari 2019

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


class Solution {
public:
    int divide(int dividend, int divisor) {
        if(divisor == 0)
            return 0;
        if(divisor == 1)
            return dividend;
        if(dividend == divisor)
            return 1;
        if(divisor == 2)
            return dividend >> 1;
         
        bool sign = false;
        if( (dividend > 0 && divisor < 0) ||
            (dividend < 0 && divisor > 0))
            sign = true;
             
        if(dividend == numeric_limits<int>::max()
            && divisor == numeric_limits<int>::min())
            return 0;
         
        dividend = dividend == numeric_limits<int>::min() ?
                numeric_limits<int>::max() : abs(dividend);
        divisor = divisor == numeric_limits<int>::min() ?
                numeric_limits<int>::max() : abs(divisor);
         
        int result = (int) floor(exp(log(dividend) - log(divisor)));
        return sign ? -result : result;
    }
};