您的位置:首页 > 其它

LeetCode OJ:Divide Two Integers(两数相除)

2015-11-05 21:13 519 查看
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 > 0 ? 1 : -1;
int sign2 = divisor > 0 ? 1 : -1;
long long d1 = abs(static_cast<long long>(dividend));
long long d2 = abs(static_cast<long long>(divisor));
int res = 0;
while(d1 >= d2){
long long tmp = d2;
for(int i = 0; d1 >= tmp; ++i){
d1 -= tmp;
tmp <<= 1;
res += 1LL << i;
}
}
if(sign1 == sign2){
if(res == INT_MIN)
return INT_MAX;
return res;
}else
return res * -1;
}
};


PS:这题溢出情况相当恶心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: