您的位置:首页 > 编程语言 > C语言/C++

Leetcode 29. Divide Two Integers (Medium) (cpp)

2016-08-17 18:06 363 查看
Leetcode 29. Divide Two Integers (Medium) (cpp)

Tag: Math, Binary Search

Difficulty: Medium

/*

29. Divide Two Integers (Medium)

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) {
if (!dividend) {
return 0;
}
if (!divisor || dividend == INT_MIN && divisor == -1) {
return INT_MAX;
}
int sign = (dividend > 0 ^ divisor > 0) ? -1 : 1;
long dd = labs((long)dividend), dr = labs((long)divisor);
if (dd < dr) {
return 0;
}
int h = 0;
long t = dr;
while (t <= dd) {
t <<= 1;
h++;
}
long ret = 1 << --h;
dd -= (t >>= 1);
while (dd >= dr) {
while (t > dd){
t >>= 1;
h--;
}
ret |= 1 << h;
dd -= t;
}
return sign < 0 ? -ret : ret;
}
};

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode cpp