i*********7 发帖数: 348 | 1 好像之前有人问过怎么解决overflow的问题。。
同求问一下。
======该死的分割线=======
好吧,终于过了leetcode的所有test cases了。。
不知道有没有别的同志给其他办法。
我就先贴一下我的代码吧
int divide(int aa, int bb) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
bool flag = false;
long long int a = aa;
long long int b = bb;
if(a < 0)
{
flag = !flag;
a = ~a + 1;
}
if(b < 0){
flag = !flag;
b = ~b + 1;
}
int digitA = log2(a);
int digitB = log2(b);
int q = 0;
int msb = (digitA - digitB + 1);
for(int i = msb; i >= 0; i--)
{
if(((b << i) > a) || ((a >> i) < b))
{
continue;
}
q |= (1 << i);
a -= (b << i);
}
if(flag){
q = ~q + 1;
}
return q;
} | d******a 发帖数: 238 | 2 以前写过一个递归的。
long long int divhelper(long long int a, long long int b)
{
if (a < b)
return 0;
if (a == b)
return 1;
int shift = 0;
while ((b << shift) <= a)
shift++;
return (1 << (shift - 1)) + divhelper(a - (b << (shift - 1)), b);
}
int div1(int a, int b)
{
assert(b != 0);
int sign;
if ((a >= 0 && b > 0) || (a < 0 && b < 0))
sign = 1;
else
sign = -1;
long long int c = abs(a);
long long int d = abs(b);
long long int result = divhelper(c , d);
return sign * result;
} |
|