
正文
LeetCode OJ:Divide Two Integers(两数相除)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Divide two integers without using multiplication, division and mod operator.
If it is overflow, return MAX_INT.
两数相除,不能用*,/,% 那么只能用位移运算了,注意边界条件防止溢出,代码如下:
class Solution {
public:
int divide(int dividend, int divisor) {
int sign1 = dividend > ? : -;
int sign2 = divisor > ? : -;
long long d1 = abs(static_cast<long long>(dividend));
long long d2 = abs(static_cast<long long>(divisor));
int res = ;
while(d1 >= d2){
long long tmp = d2;
for(int i = ; d1 >= tmp; ++i){
d1 -= tmp;
tmp <<= ;
res += 1LL << i;
}
}
if(sign1 == sign2){
if(res == INT_MIN)
return INT_MAX;
return res;
}else
return res * -;
}
};
PS:这题溢出情况相当恶心。






