您的位置:首页 > 其它

[leetcode]29. Divide Two Integers

2017-01-05 15:22 471 查看
Divide two integers without using multiplication, division and mod operator.

If it's overflow, return INT_MAX.

代码转载

class Solution {
public:
int divide(int dividend, int divisor)
{
long long int ret = divideLong(dividend, divisor);
if(ret > INT_MAX || ret < INT_MIN)
return INT_MAX;
return ret;
}

long long int divideLong(long long dividend, long long divisor) {
// extreme cases
if(divisor == 0)
return INT_MAX;
if(dividend == 0)
return 0;

int sign = 1;
if((dividend < 0) ^ (divisor < 0))
sign = -1;

dividend = abs(dividend);
divisor = abs(divisor);
long long ret = 0;
while(dividend > divisor)
{
int shift = 0;
long long part = 1;
while(dividend > (divisor << shift))
{
part <<= 1;
shift ++;
}
if(dividend == (divisor << shift))
{
ret += part;
break;
}
else
{// dividend < (divisor << shift)
part >>= 1;
shift --;
}
ret += part;
dividend -= (divisor << shift);
}
if(dividend == divisor)
ret ++;

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