divide-two-integers

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

1.需要考虑除数为零的情况,还有被除数为无穷小、除数为-1溢出的情况。

2.然后确定符号位,用异或。

3.将被除数和除数转换为long long,防止溢出


class Solution {
public:
    int divide(int dividend, int divisor) {
        // refer:https://leetcode.com/discuss/38997/detailed-explained-8ms-c-solution
        if (!divisor || (dividend == INT_MIN && divisor == -1))
            return INT_MAX;
        int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
        long long dvd = labs(dividend);
        long long dvs = labs(divisor);
        int res = 0;
        while (dvd >= dvs) { 
            long long temp = dvs, multiple = 1;
            while (dvd >= (temp << 1)) {
                temp <<= 1;
                multiple <<= 1;
            }
            dvd -= temp;
            res += multiple;
        }
        return sign == 1 ? res : -res; 
    }
};

猜你喜欢

转载自blog.csdn.net/jifeng7288/article/details/80380659