题目:https://leetcode-cn.com/problems/divide-two-integers/
class Solution {
public:
int divide(int dividend, int divisor) {
/*
*两数相除求商,要求不用 乘法、除法、mod
*思路:用左移运算符逐“位”确定商
*注意防int溢出
*/
int flag = 1;
//先转成long long计算
long long y = dividend;
long long x = divisor;
if(x < 0) {
x = -x;
y = -y;
}
if(y < 0) {
y = -y;
flag = -1;
}
if(x == 1) {//特判
y *= flag;
if(y > INT_MAX) return INT_MAX;
if(y < INT_MIN) return INT_MIN;
return y;
}
if(y < x) return 0;//特判
long long a = 0, b = 1, c = x;
while(1){
while( (x<<1) < y) x <<= 1,b <<= 1;
y -= x;
a += b;
if(y < c) break;
x = c;
b = 1;
}
a = a*flag;
if(a > INT_MAX) return INT_MAX;
if(a < INT_MIN) return INT_MIN;
return a;
}
};