由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - leetcode上的2个整数相除
相关主题
两整数相除问题divide two integers
Divide Two IntegersDivide Two Integers OJ和CCP150的做法
leetcode: Divide Two Integers 怎么做?FLG面试题,压缩整数 (转载)
关于Divide a integer问一道 Interviewstreet 上的题 (JAVA)
M 家电面Calculate Sqr()
问一个facebook的电面题facebook on site后多久给消息啊
关于除法的问题计算乘法和除法,不用乘法和除法符号,怎么scale
leecode上的divide two integers问题两个整数除法的问题太刁钻了吧
相关话题的讨论汇总
话题: int话题: divisor话题: dividend话题: unsigned话题: return
进入JobHunting版参与讨论
1 (共1页)
C***U
发帖数: 2406
1
我在自己电脑上用位移的算法做出来了
code写的有点长 但是例子都能过
但是在leetcode上一直超时 不知道为什么
I*****8
发帖数: 37
2
这种情况,你说代码比较长,那就应该是复杂度的问题把。你把代码贴出来看看把
j*****o
发帖数: 394
3
Q群里有人帖了个通过ONLINE JUDGE的代码版本
就是你的复杂度太高了

【在 C***U 的大作中提到】
: 我在自己电脑上用位移的算法做出来了
: code写的有点长 但是例子都能过
: 但是在leetcode上一直超时 不知道为什么

r*****e
发帖数: 30
4

什麼群?

【在 j*****o 的大作中提到】
: Q群里有人帖了个通过ONLINE JUDGE的代码版本
: 就是你的复杂度太高了

C***U
发帖数: 2406
5
复杂度logn
明天贴

这种情况,你说代码比较长,那就应该是复杂度的问题把。你把代码贴出来看看把
★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite

【在 I*****8 的大作中提到】
: 这种情况,你说代码比较长,那就应该是复杂度的问题把。你把代码贴出来看看把
m******r
发帖数: 42
6
新手土鳖问题:你在自己电脑上怎么拷贝测试结果?是你自己写了caller
然后手工对照结果?好像没看到leetcode有import数据的地方啊。

【在 C***U 的大作中提到】
: 我在自己电脑上用位移的算法做出来了
: code写的有点长 但是例子都能过
: 但是在leetcode上一直超时 不知道为什么

C***U
发帖数: 2406
7
我直接写上return 1
然后他会把例子显示出来 当然我的结果都是1 都是错误的
然后我把例子再输入到我电脑里面
笨办法

【在 m******r 的大作中提到】
: 新手土鳖问题:你在自己电脑上怎么拷贝测试结果?是你自己写了caller
: 然后手工对照结果?好像没看到leetcode有import数据的地方啊。

C***U
发帖数: 2406
8
不是科班出生 写代码 比较丑 别取笑我
int divide(int dividend, int divisor) {
int flag = 1;
unsigned int x;
unsigned int y;
unsigned int z;
unsigned int i = 0;
unsigned int count = 0;
int result = 0;
if(!divisor) {
cout << "could not be divided by 0" << endl;
return 0;
}
if(dividend < 0) {
flag = -1;
dividend = - dividend;
}
if(divisor < 0) {
if(flag < 0)
flag = 1;
else
flag = -1;
divisor = - divisor;
}
x = dividend;
y = divisor;
z = y;
while(x >= z) {
i++;
z = z << 1;
}
i--;
if(i < 0)
return 0;
for(int j = i; j >= 0; j--) {
z = y;
z = z << j;
count = 0;
while(x >= z) {
x -= z;
count++;
}
result += count << j;
}
if(flag > 0)
return result;
else
return - result;
}

【在 I*****8 的大作中提到】
: 这种情况,你说代码比较长,那就应该是复杂度的问题把。你把代码贴出来看看把
m*****n
发帖数: 204
9
try -2147483648 / -2147483648
My code got into infinite loop. Looks like your code have the same problem.

【在 C***U 的大作中提到】
: 我在自己电脑上用位移的算法做出来了
: code写的有点长 但是例子都能过
: 但是在leetcode上一直超时 不知道为什么

q***y
发帖数: 24
10
溢出了
注意leetcode会输入最小的int,取负后无法用int表示

【在 C***U 的大作中提到】
: 不是科班出生 写代码 比较丑 别取笑我
: int divide(int dividend, int divisor) {
: int flag = 1;
: unsigned int x;
: unsigned int y;
: unsigned int z;
: unsigned int i = 0;
: unsigned int count = 0;
: int result = 0;
: if(!divisor) {

相关主题
问一个facebook的电面题divide two integers
关于除法的问题Divide Two Integers OJ和CCP150的做法
leecode上的divide two integers问题FLG面试题,压缩整数 (转载)
进入JobHunting版参与讨论
C***U
发帖数: 2406
11
恩 我之前注意这个了
所以才用unsigned int
我改成unsigned long
结果还是溢出 处理这个问题好像要单独拿出来

【在 q***y 的大作中提到】
: 溢出了
: 注意leetcode会输入最小的int,取负后无法用int表示

q***y
发帖数: 24
12
你哪用unsigned int了?
你仔细看你的代码,还是用int存,所以溢出了

【在 C***U 的大作中提到】
: 恩 我之前注意这个了
: 所以才用unsigned int
: 我改成unsigned long
: 结果还是溢出 处理这个问题好像要单独拿出来

C***U
发帖数: 2406
13
我把dividend和divisor存到x y里面都是unsigned int了
下面这个代码对了 通过leetcode的验证了 只不过写的很丑
把最小的数拿出来单独处理了
int divide(int dividend, int divisor) {
int flag = 1;
unsigned long int x;
unsigned long int y;
unsigned long int z;
unsigned int i = 0;
unsigned int count = 0;
int result = 0;
if(!divisor) {
cout << "could not be divided by 0" << endl;
return 0;
}
if(dividend == -2147483648) {
if(divisor > 0) {
dividend += divisor;
result = divide(dividend, divisor) - 1;
}
else {
dividend -= divisor;
result = divide(dividend, divisor) + 1;
}
return result;
}
if(dividend < 0) {
flag = -1;
x = - dividend;
}
else
x = dividend;
if(divisor < 0) {
if(flag < 0)
flag = 1;
else
flag = -1;
y = - divisor;
}
else
y = divisor;
z = y;
while(x >= z) {
i++;
z = z << 1;
}
i--;
if(i < 0)
return 0;
for(int j = i; j >= 0; j--) {
z = y;
z = z << j;
count = 0;
while(x >= z) {
x -= z;
count++;
}
result += count << j;
}
if(flag > 0)
return result;
else
return - result;
}

【在 q***y 的大作中提到】
: 你哪用unsigned int了?
: 你仔细看你的代码,还是用int存,所以溢出了

C***U
发帖数: 2406
14
谢谢你前面的指正
确实是最小的整数的时候溢出的原因

【在 q***y 的大作中提到】
: 你哪用unsigned int了?
: 你仔细看你的代码,还是用int存,所以溢出了

h*****3
发帖数: 1391
15
个人意见啊,你这程序还可以改进的合理些。
比如看是否是负数,其实用个bool就可以了,初始为false,每次遇见负数取反就可以
了。
如果divisor是1,直接返回dividend。。。
C***U
发帖数: 2406
16
恩 你说的bool那个是对的
1那个没必要把 那样code更长了

【在 h*****3 的大作中提到】
: 个人意见啊,你这程序还可以改进的合理些。
: 比如看是否是负数,其实用个bool就可以了,初始为false,每次遇见负数取反就可以
: 了。
: 如果divisor是1,直接返回dividend。。。

d******a
发帖数: 238
17
写了个递归的。
int divhelper(int a, int b)
{
if (a <= b)
return a / b;

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);

int result = divhelper(c , d);

return sign * result;
}
C***U
发帖数: 2406
18
不能用除法的

【在 d******a 的大作中提到】
: 写了个递归的。
: int divhelper(int a, int b)
: {
: if (a <= b)
: return a / b;
:
: int shift = 0;
:
: while ((b << shift) <= a)
: shift++;

d******a
发帖数: 238
19
if (a <= b)
return a / b;
改成
if (a < b)
return 0;
if (a == b)
return 1;
C***U
发帖数: 2406
20

你写的比我好多了
我的太长了

【在 d******a 的大作中提到】
: if (a <= b)
: return a / b;
: 改成
: if (a < b)
: return 0;
: if (a == b)
: return 1;

1 (共1页)
进入JobHunting版参与讨论
相关主题
两个整数除法的问题太刁钻了吧M 家电面
整数除法问一个facebook的电面题
Divide Two Integers Answer 超时关于除法的问题
请问在程序中怎么测试是否整数溢出leecode上的divide two integers问题
两整数相除问题divide two integers
Divide Two IntegersDivide Two Integers OJ和CCP150的做法
leetcode: Divide Two Integers 怎么做?FLG面试题,压缩整数 (转载)
关于Divide a integer问一道 Interviewstreet 上的题 (JAVA)
相关话题的讨论汇总
话题: int话题: divisor话题: dividend话题: unsigned话题: return