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



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

題目:


解答:

class Solution {
public:
    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;
    }
};