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