Thursday, November 28, 2013

LeetCode Problem : Divide Two Integers

Problem

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

Code

int absval(int num,int bits)
{
    int mask = num>>bits;
    return ((num + mask)^mask);
}
bool isDivNegative(int n1,int n2,int bits)
{
    int mask = 1 << bits;
    return ((n1 & mask) ^ (n2 & mask));
}
int division(unsigned int n1,unsigned int n2,int bits) {
    unsigned int q = 0;
    unsigned int r = 0;
    for(int i = bits;i >= 0; --i){
        r = r << 1;
        if(n1 & (1 << i))
            r |= 1;
        else
            r &= ~1;
        if(r >= n2){
            r -= n2;
            q |= (1 << i);
        }
    }
    return q;
}
int divide(int dividend, int divisor) {
    // Note: The Solution object is instantiated only once and is reused by each test case.
    int bits = numeric_limits<int>::digits;
    unsigned int n1 = absval(dividend,bits);
    unsigned int n2 = absval(divisor,bits);
    int ret = division(n1,n2,bits);
    return ((isDivNegative(dividend,divisor,bits)) ? -ret : ret);
}

No comments:

Post a Comment