29. Divide Two Integers

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

If it is overflow, return MAX_INT.

两个数相除,不使用乘法,除法,求模计算两个数的除法~

除法运算:被除数中包含有多少个除数的计算
 
由于是int类型的除法,因此结果可能超过int的最大值,当超过int的最大值时输出int的最大值
 
计算商:
1、判断除法运算后的结果正负。
2、将被除数和除数都变为正数,便于计算计算
3、当被除数小于除数时,返回0
  否则,进入循环体;
4、循环体是:判断被除数包含多少个除数(用到了移位的方法,所以这里的个数是2的整数倍)
 
class Solution {
public:
    int divide(int dividend, int divisor) {
        if (!divisor || (dividend == INT_MIN && divisor == -1))
            return INT_MAX;
        int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1; //表示符号
        long long dvd = labs(dividend);  //labs求绝对值的(和abs函数一样,只是abs针对int类型的,而labs针对long类型的)
        long long dvs = labs(divisor);
        int res = 0; //
        while (dvd >= dvs) { 
            long long temp = dvs, multiple = 1;
            while (dvd >= (temp << 1)) {  //循环条件为temp左移一位(相当于乘上2)之后小于被除数
                temp <<= 1;    //temp左移一位
                multiple <<= 1;   //multiple左移一位(除数左移,商也左移)
            }
            dvd -= temp;  
            res += multiple;
        }
        return sign == 1 ? res : -res; 
    }
};
原文地址:https://www.cnblogs.com/hozhangel/p/7835307.html