程式語言 - LeetCode - C - 29. Divide Two Integers



參考資訊:
https://algo.monster/liteproblems/29
https://www.cnblogs.com/grandyang/p/4431949.html

題目:


解答:

int divide(int dividend, int divisor)
{
    long m = dividend;
    long n = divisor;
    bool sign = ((dividend < 0) ^ (divisor < 0)) ? false : true;

    if (n == 1) {
        return m;
    }

    if ((m == INT_MIN) && (n == -1)) {
        return INT_MAX;
    }

    m = labs(dividend);
    n = labs(divisor);

    long r = 0;
    while (m >= n) {
        long t = n;
        long p = 1;

        while (m >= (t << 1)) {
            t <<= 1;
            p <<= 1;
        }
        r += p;
        m -= t;
    }

    return sign ? r : -r;
}