您的位置:首页 > 其它

LeetCode: Divide Two Integers

2015-01-23 08:27 281 查看
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) {
bool positive = true;
if(dividend == 0)
return 0;
if((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0))
positive = true;
else
positive = false;
unsigned int dvd = std::abs(dividend);
unsigned int dvs = std::abs(divisor);
unsigned int dvs2 = dvs;
int step = 0;
unsigned int result = 0;
while(dvd > dvs)
{
dvs = (dvs << 1);
step++;
}
while(step >= 0)
{
if(dvd >= dvs)
{
dvd -= dvs;
result += (1 << step);
}
dvs = dvs >> 1;
step--;
}
if(result > INT_MAX && positive)
result = INT_MAX;
if(positive)
return result;
else
return 0 - result;
}
};

Round 2:

class Solution {
public:
int divide(int dividend, int divisor) {
long a = dividend;
long b = divisor;
long result = 0;
int symbol = 0;
if((a > 0 && b > 0) || (a < 0 && b < 0))
symbol = 1;
a = std::abs(a);
b = std::abs(b);
long remain = a;
while(remain >= b)
{
long tempB = b;
long cur = 1;
while((tempB << 1) < remain)
{
tempB = tempB << 1;
cur = cur << 1;
}
remain = remain - tempB;
result += cur;
}
result = symbol > 0 ? result : 0-result;
if(result > INT_MAX || result < INT_MIN)
return INT_MAX;
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: