由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - divide two integers
相关主题
leetcode: Divide Two Integers 怎么做?两整数相除问题
leecode上的divide two integers问题关于Divide a integer
M 家电面问一道 Interviewstreet 上的题 (JAVA)
Divide Two Integers OJ和CCP150的做法Amazon电面两题
Divide Two IntegersTwo Sigma一道题
Divide Two Integers Answer 超时哪位大侠帮我看看这个code
关于除法的问题find the first missing positive number
leetcode上的2个整数相除请教一下leetcode gas station
相关话题的讨论汇总
话题: long话题: factor话题: divisor话题: int话题: remain
进入JobHunting版参与讨论
1 (共1页)
g***j
发帖数: 1275
1
class Solution {
如下的code可以过,但是有个疑问,为啥,我吧下面的long long的部分改成int,就过
不了了啊?
public:
int divide(int dividend, int divisor) {
// Note: The Solution object is instantiated only once and is reused
by each test case.
if(divisor == 1) return dividend;
if(divisor == -1) return -1*dividend;
int sign = 1;

if(dividend < 0) sign = -1*sign;
if(divisor < 0) sign = -1*sign;

long long remain = abs((long long)dividend); // ???

long long factor = abs((long long)divisor); // ???
if(factor == remain) return sign;

int c = 1;

while(remain > factor) {
factor = factor<<1;
c = c<<1;
}

int result = 0;
while(remain >= abs((long long)divisor)) {

if(remain >= factor) {
remain -= factor;
result +=c;
}

factor = factor>>1;
c = c>>1;
}

return result * sign;
}
};
m********c
发帖数: 105
2
abs(INT_MIN)结果还是-2147483648,不是2147483648,所以要转换成long long,这是
一个原因,好像还有其他原因
g***j
发帖数: 1275
3
面试的时候需要考虑这些么?
还有其他情况的overflow

【在 m********c 的大作中提到】
: abs(INT_MIN)结果还是-2147483648,不是2147483648,所以要转换成long long,这是
: 一个原因,好像还有其他原因

m********c
发帖数: 105
4
我觉得需要考虑吧,不过不确定,看考官吧

【在 g***j 的大作中提到】
: 面试的时候需要考虑这些么?
: 还有其他情况的overflow

s********u
发帖数: 1109
5
题目说不能用乘法哈哈,所以不能用sign*res
我原来以为 if(remain >= factor) {这里改成while会更好,后来一想,最多减一次,
因为是2进制。。
大家觉得这道题目考点是什么呢?也不像是binary search,几乎就是考等比数列求和
公式。。
l*n
发帖数: 529
6
sign不需要用乘法吧,直接来个minus?-res:res就好了。考点感觉还蛮多的,overflow
、loop watchout、bit operation等等。

【在 s********u 的大作中提到】
: 题目说不能用乘法哈哈,所以不能用sign*res
: 我原来以为 if(remain >= factor) {这里改成while会更好,后来一想,最多减一次,
: 因为是2进制。。
: 大家觉得这道题目考点是什么呢?也不像是binary search,几乎就是考等比数列求和
: 公式。。

k******4
发帖数: 94
7
unsigned int newx = x;
If (x<0)
newx = 1+abs(1+x);

abs(INT_MIN)结果还是-2147483648,不是2147483648,所以要转换成long long,这是
一个原因,好像还有其他原因

【在 m********c 的大作中提到】
: abs(INT_MIN)结果还是-2147483648,不是2147483648,所以要转换成long long,这是
: 一个原因,好像还有其他原因

1 (共1页)
进入JobHunting版参与讨论
相关主题
请教一下leetcode gas stationDivide Two Integers
Leetcode Copy List with Random Pointer Runtime Error?Divide Two Integers Answer 超时
帮俺看一下代码DP+DFS为什么过不了work break II 那个大case : aaaaaaa...关于除法的问题
Surrounded Regions, dfs solution. 过不了online testleetcode上的2个整数相除
leetcode: Divide Two Integers 怎么做?两整数相除问题
leecode上的divide two integers问题关于Divide a integer
M 家电面问一道 Interviewstreet 上的题 (JAVA)
Divide Two Integers OJ和CCP150的做法Amazon电面两题
相关话题的讨论汇总
话题: long话题: factor话题: divisor话题: int话题: remain