您的位置:首页 > 其它

leetcode 29. Divide Two Integers

2016-01-11 22:21 316 查看
题目链接

计算两个数相除的结果, 不可以使用乘法除法和取余。 如果越界, 返回INT_MAX。

首先判断越界的情况, 如果除数为0, 显然越界。 还有一种是 被除数为-2147483648, 除数为-1, 这样结果为2147483648, 越界。

不能使用除法的话, 就只能用减法。 但是一个一个减显然太慢, 所以可以用二进制, 具体的方法看代码。

class Solution {
public:
int divide(int dividend, int divisor) {
if(dividend == INT_MIN && divisor == -1)
return INT_MAX;
if(divisor == 0)
return INT_MAX;
unsigned int did = abs(dividend);
unsigned int dis = abs(divisor);
int ans = 0;
while(did >= dis) {
long long tmp = dis;
int i;
for(i = 0; tmp<=did; i++) {
tmp <<= 1;
}
ans += (1<<(i-1));
did -= (dis<<(i-1));
}
return (dividend>0 ^ divisor>0)?-ans:ans;       //如果异或为0说明同号
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: