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.
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;
}
};
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;
}
};
相关文章推荐
- leetcode29---Divide Two Integers
- LeetCode 29 Divide Two Integers
- LeetCode 29. Divide Two Integers
- [LeetCode] 29. Divide Two Integers ☆☆
- [LeetCode] Divide Two Integers
- [LeetCode] Divide Two Integers
- Leetcode 29. Divide Two Integers
- leetcode 29 divide two integers
- Leetcode: Divide Two Integers
- leetcode 29. Divide Two Integers
- leetcode - Divide Two Integers
- Leetcode——29. Divide Two Integers
- LeetCode(29) - Divide Two Integers
- [LeetCode]29. Divide Two Integers
- [LeetCode] Divide Two Integers
- leetcode29:Divide Two Integers
- [leetcode]29. Divide Two Integers
- LeetCode的一个题目 Divide Two Integers
- [LeetCode] Divide Two Integers 两数相除
- leetcode 29. Divide Two Integers