一,Divide Two Integers
题目描述
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
我的代码
/**
* 基本思想:使用移位运算,右移一位相当于扩大两倍。如果被除数大于或等于除数,则进行如下循环。定义变量t等于除数,定义计数p,当t的两倍小于等于被除数时,
* 进行如下循环,t扩大一倍,p扩大一倍,然后更新res和m。
*/
class Solution {
public:
int divide(int dividend, int divisor) {
if (divisor == 0 || (dividend == INT_MIN && divisor == -1)){
return INT_MAX;
}
long m = abs((long long)dividend);
long n = abs((long long)divisor);
long res = 0;
int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
if (n == 1){
return sign == 1 ? m : -m;
}
while (m >= n) {
while (m >= (n << 1)) {
n <<= 1;
}
res += n;
m -= n;
n = divisor;
}
return sign == 1 ? res : -res;
}
}