由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 关于除法的问题
相关主题
计算乘法和除法,不用乘法和除法符号,怎么scale关于Divide a integer
M 家电面leetcode: Divide Two Integers 怎么做?
问一道 ama的除法题divide two integers
两个整数除法的问题太刁钻了吧Divide Two Integers OJ和CCP150的做法
Divide Two Integers Answer 超时Divide Two Integers
leetcode上的2个整数相除问一道 Interviewstreet 上的题 (JAVA)
leecode上的divide two integers问题How to multiply two floats using only summation
两整数相除问题这道题,怎么做呀?
相关话题的讨论汇总
话题: int话题: divisor话题: res话题: dividend话题: step
进入JobHunting版参与讨论
1 (共1页)
h******i
发帖数: 30
1
除2个整数不能用乘除.那位给个O(lgn)的解法阿?我只知道O(n)的
r*******n
发帖数: 266
2
如果是m/n
那start from x=m
step = m/2
loop:
if x * n > m
x = x - step/2
else:
x = x + step/2
step /= 2
基本就是个对分查找

【在 h******i 的大作中提到】
: 除2个整数不能用乘除.那位给个O(lgn)的解法阿?我只知道O(n)的
h******i
发帖数: 30
3
这个我也想到了 不过题目要求不能用乘法。 x*n>m不合要求阿。
r*******n
发帖数: 266
4
可以位移和加法啊.....
不还是binary search咩

【在 h******i 的大作中提到】
: 这个我也想到了 不过题目要求不能用乘法。 x*n>m不合要求阿。
c****p
发帖数: 6474
5
对于x/y,
先找到k,使2^k<=x<2^(k+1),
x -= 2^k
然后依次比较x和2^(k-1)...2^0至x为零为止。
结果的每一位,如果够减就是1,不够减就是0【 在 happylii (小马哥) 的大作中提到
h******i
发帖数: 30
6
照着写了个code 不过放在leetcode上测试连small set都超时了。那位给贴个效率高的
,让我学习一下。
int Multiply(int x, int y)
{
bool neg = (x>0&&y<0)||(x<0&&y>0);
y = abs(y);
int res = 0;
int orgy = y;
while(y>1)
{
res += x << 1;
y-=2;
}
if(y==1)
res+=x;
if(neg&&orgy<0)
return -res;
else
return res;
}
int divide(int dividend, int divisor) {
int res = dividend;
int step = dividend;
while(1)
{
int product = Multiply(res,divisor);
if(step>1)
step=step>>1;
if(product>dividend)
{
res-=step;
}
else if((product+divisor) res+=step;
else
break;
}
return res;
}
p*****2
发帖数: 21240
7
int divide(int dividend, int divisor) {
if (divisor == 0)
throw new ArithmeticException();
int k = 0;
long a = dividend;
long b = divisor;
a = Math.abs(a);
b = Math.abs(b);
boolean neg = (dividend & 1 << 31 ^ divisor & 1 << 31) != 0;
while (b << k <= a)
k++;
int r = 0;
for (int i = k; i >= 0; i--) {
if (b << i > a)
continue;
else {
r |= 1 << i;
a -= b << i;
}
}
return neg ? -r : r;
}
h******i
发帖数: 30
8
刚才在oj上试了下,还是超时了。。。。

【在 p*****2 的大作中提到】
: int divide(int dividend, int divisor) {
: if (divisor == 0)
: throw new ArithmeticException();
: int k = 0;
: long a = dividend;
: long b = divisor;
: a = Math.abs(a);
: b = Math.abs(b);
: boolean neg = (dividend & 1 << 31 ^ divisor & 1 << 31) != 0;
: while (b << k <= a)

p*****2
发帖数: 21240
9

我在leetcode上试了。可以。

【在 h******i 的大作中提到】
: 刚才在oj上试了下,还是超时了。。。。
t****t
发帖数: 6806
10
你这乘法是线性的, 能不超时吗.

【在 h******i 的大作中提到】
: 照着写了个code 不过放在leetcode上测试连small set都超时了。那位给贴个效率高的
: ,让我学习一下。
: int Multiply(int x, int y)
: {
: bool neg = (x>0&&y<0)||(x<0&&y>0);
: y = abs(y);
: int res = 0;
: int orgy = y;
: while(y>1)
: {

c****p
发帖数: 6474
11
http://www.mitbbs.com/mitbbs_article.php?board=JobHunting&id=31

【在 h******i 的大作中提到】
: 刚才在oj上试了下,还是超时了。。。。
1 (共1页)
进入JobHunting版参与讨论
相关主题
这道题,怎么做呀?Divide Two Integers Answer 超时
某银行的笔试题leetcode上的2个整数相除
几年前G家onsite的一道题leecode上的divide two integers问题
FB电面面筋顺求refer两整数相除问题
计算乘法和除法,不用乘法和除法符号,怎么scale关于Divide a integer
M 家电面leetcode: Divide Two Integers 怎么做?
问一道 ama的除法题divide two integers
两个整数除法的问题太刁钻了吧Divide Two Integers OJ和CCP150的做法
相关话题的讨论汇总
话题: int话题: divisor话题: res话题: dividend话题: step