由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 计算乘法和除法,不用乘法和除法符号,怎么scale
相关主题
关于除法的问题某银行的笔试题
两个整数除法的问题太刁钻了吧FB电面面筋顺求refer
M 家电面问一个facebook的电面题
Divide Two Integersleetcode上的2个整数相除
问一道 Interviewstreet 上的题 (JAVA)leecode上的divide two integers问题
How to multiply two floats using only summation两整数相除问题
问一道 ama的除法题问一个题目
这道题,怎么做呀?关于Divide a integer
相关话题的讨论汇总
话题: neg话题: int话题: return话题: while
进入JobHunting版参与讨论
1 (共1页)
d******u
发帖数: 397
1
这道题也挺经典的,做乘法比较简单
假设输入是正整数,如果不是要处理一下
int multiply(int a, int b){
if(a==0 ||b==0) return 0;
if(a==1) return b;
if(b==1) return a;
int r =0;
while(b>0){
if(b%2==1) r+=a;
a<<=1;
b>>=1;
}
return r;
}
问题除法的话怎么做呢?另外,怎么在parallel的环境下scale呢?
请指教,谢谢!
p*****2
发帖数: 21240
2

是不是需要处理一下负数?

【在 d******u 的大作中提到】
: 这道题也挺经典的,做乘法比较简单
: 假设输入是正整数,如果不是要处理一下
: int multiply(int a, int b){
: if(a==0 ||b==0) return 0;
: if(a==1) return b;
: if(b==1) return a;
: int r =0;
: while(b>0){
: if(b%2==1) r+=a;
: a<<=1;

S******t
发帖数: 151
3
会做乘法就肯定可以做除法啊……
你这个乘法做的方法就是展开成二进制然后逐次加然后移位,语法有点小问题
除法你直接用乘法去二分找结果就可以了

【在 d******u 的大作中提到】
: 这道题也挺经典的,做乘法比较简单
: 假设输入是正整数,如果不是要处理一下
: int multiply(int a, int b){
: if(a==0 ||b==0) return 0;
: if(a==1) return b;
: if(b==1) return a;
: int r =0;
: while(b>0){
: if(b%2==1) r+=a;
: a<<=1;

p*****2
发帖数: 21240
4
int divide(int a, int b) // return c=a/b;
{
if (b == 0)
throw new ArithmeticException();
boolean neg = false;
if (a < 0)
neg = !neg;
if (b < 0)
neg = !neg;
a = Math.abs(a);
b = Math.abs(b);
int d = 0;
while (b << d <= a)
{
d++;
}
int c = 0;
for (int i = d; i >= 0; i--)
{
if (b << i <= a)
{
c |= 1 << i;
a -= b << i;
}
}
if (neg)
c = -c;
return c;
}
d******u
发帖数: 397
5
请问在parallel环境下怎么scale呢?
楼上程序运行了一下,结果时对的。。。。谢谢!
d******u
发帖数: 397
6
多谢,语法纠正了。。。

【在 S******t 的大作中提到】
: 会做乘法就肯定可以做除法啊……
: 你这个乘法做的方法就是展开成二进制然后逐次加然后移位,语法有点小问题
: 除法你直接用乘法去二分找结果就可以了

p*****2
发帖数: 21240
7
刚才上leetcode上run了一下,timeout呀。1337过来说一下吧。我search半天没知道他
的点评。
i**********e
发帖数: 1145
8
while (b << d <= a)
应该是这里死循环了。
当 a 很大的时候,bit左移就会产生溢出,而成为负数。一直死循环下去。

【在 p*****2 的大作中提到】
: 刚才上leetcode上run了一下,timeout呀。1337过来说一下吧。我search半天没知道他
: 的点评。

i**********e
发帖数: 1145
9
还有要考虑 abs 会产生的溢出。
p*****2
发帖数: 21240
10

多谢。pass了。

【在 i**********e 的大作中提到】
: while (b << d <= a)
: 应该是这里死循环了。
: 当 a 很大的时候,bit左移就会产生溢出,而成为负数。一直死循环下去。

t********6
发帖数: 348
11
while ( b << digit <= a )
-》
while ( (a >> digit) > b)
right?

【在 p*****2 的大作中提到】
:
: 多谢。pass了。

c*********t
发帖数: 2921
12
北京二爷,你是怎么改的,能不能把你的代码更新一下。

【在 p*****2 的大作中提到】
:
: 多谢。pass了。

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

就是改成long了。
public int divide(int dividend, int divisor) // return c=a/b;
{
long a = dividend;
long b = divisor;
if (b == 0)
throw new ArithmeticException();
boolean neg = false;
if (a < 0)
neg = !neg;
if (b < 0)
neg = !neg;
a = Math.abs(a);
b = Math.abs(b);
int d = 0;
while (b << d <= a)
{
d++;
}
int c = 0;
for (int i = d; i >= 0; i--)
{
if (b << i <= a)
{
c |= 1 << i;
a -= b << i;
}
}
if (neg)
c = -c;
return c;
}

【在 c*********t 的大作中提到】
: 北京二爷,你是怎么改的,能不能把你的代码更新一下。
1 (共1页)
进入JobHunting版参与讨论
相关主题
关于Divide a integer问一道 Interviewstreet 上的题 (JAVA)
leetcode: Divide Two Integers 怎么做?How to multiply two floats using only summation
Divide Two Integers Answer 超时问一道 ama的除法题
divide two integers这道题,怎么做呀?
关于除法的问题某银行的笔试题
两个整数除法的问题太刁钻了吧FB电面面筋顺求refer
M 家电面问一个facebook的电面题
Divide Two Integersleetcode上的2个整数相除
相关话题的讨论汇总
话题: neg话题: int话题: return话题: while