由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 好吧,问一个除法函数的问题。
相关主题
到底我这个题leetcode 的add binary解法错在哪了??搞砸了google onsite
两个整数除法的问题太刁钻了吧请教如何解决整数的溢出问题
讨论一道面试题问个简单的数学编程题吧(google interview)
除法有什么规律吗?brainteaser
有看《程序设计导引及在线实践》的吗?Google 面试
昨天的MS面试Amazon 二面面经
发篇面经问一道 ama的除法题
算法题求助coding question
相关话题的讨论汇总
话题: int话题: long话题: flag话题: digitb话题: digita
进入JobHunting版参与讨论
1 (共1页)
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;
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
coding question有看《程序设计导引及在线实践》的吗?
这道题,怎么做呀?昨天的MS面试
某银行的笔试题发篇面经
只用加减实现整数除法,到底想考查什么?算法题求助
到底我这个题leetcode 的add binary解法错在哪了??搞砸了google onsite
两个整数除法的问题太刁钻了吧请教如何解决整数的溢出问题
讨论一道面试题问个简单的数学编程题吧(google interview)
除法有什么规律吗?brainteaser
相关话题的讨论汇总
话题: int话题: long话题: flag话题: digitb话题: digita