class Solution {
public:
int divide(int dividend, int divisor) {
if(divisor == INT_MIN) return (dividend == INT_MIN)?1:0;
bool flag = false;
if(dividend == INT_MIN && divisor == -1) return INT_MAX;
else if(dividend == INT_MIN && divisor == 1) return INT_MIN;
else if(dividend == INT_MIN) {
flag = true;
dividend += abs(divisor);
}
int sign = ((dividend > 0) ^ (divisor > 0))? 1: 0;
int a = abs(dividend);
int b = abs(divisor);
int rest = 0;
for(int i = 31; i >= 0; i--){
if(( a >> i) >= b)
{
a = a - ( b << i);
rest = rest << 1;
rest++;
}
else
rest = rest << 1;
}
if(flag) rest++;
rest = (sign > 0)?0 - rest:rest;
return rest;
}
};
在不用乘除法的情况实现整数的除法
需要注意的点
- 注意INT的范围,负数的绝对值比正数的绝对值大1