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; } };