您的位置:首页 > 其它

[LeetCode] Divide Two Integers

2012-11-26 21:23 453 查看
Divide two integers without using multiplication, division and mod operator.

class Solution {
private:
long long f[100];
public:
int bsearch(long long a[], int left, int right, long long key)
{
if (left > right)
return -1;

int mid = left + (right - left) / 2;
if (a[mid] == key)
return mid;
else if (a[mid] < key)
{
int pos = bsearch(a, mid + 1, right, key);
return pos == -1 ? mid : pos;
}
else
{
return bsearch(a, left, mid - 1, key);
}
}

int divide(int dividend, int divisor) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int sign = dividend < 0 ? -1 : 1;
if (divisor < 0)
sign *= -1;

long long div = dividend;
div = abs(div);
long long divisorL = divisor;
divisorL = abs(divisorL);
f[0] = divisorL;
int size = 1;
while(true)
{
if (f[size-1] >= div)
break;
f[size] = f[size-1] + f[size-1];
size++;
}

int num = 0;
long long sum = 0;
while(div > 0)
{
int pos = bsearch(f, 0, size - 1, div);
if (pos == -1)
break;
div -= f[pos];
num += (1 << pos);
}

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