avatar
a*r
1
要求实现:
divide(int a, int b)
菜鸟写了一行
return (double) a/b;
印度哥说不行
哪位达人能做一下这道题?
跪求!!!
avatar
y*n
2
你就说只好中国除法,不会印度除法
avatar
j*3
3
哈哈哈哈lz太可爱了
avatar
l*a
4
好歹b==0要处理一下吧

【在 a********r 的大作中提到】
: 要求实现:
: divide(int a, int b)
: 菜鸟写了一行
: return (double) a/b;
: 印度哥说不行
: 哪位达人能做一下这道题?
: 跪求!!!

avatar
y*n
5
不需要把,反正计算机会处理的。。
avatar
d*y
6
java的话要先把a和b都cast成double才行。
avatar
w*8
7
public class Solution {
public int divide(int dividend, int divisor) {
int a = Math.abs(dividend);
int b = Math.abs(divisor);
boolean neg = (dividend > 0 && divisor < 0) || (dividend < 0 &&
divisor > 0);
if (divisor == 0) {
return Integer.MAX_VALUE;
}
if (divisor == Integer.MIN_VALUE) {
return (dividend == Integer.MIN_VALUE) ? 1 : 0;
}
if (dividend == Integer.MIN_VALUE) {
if (neg) {
return -1 + divide(dividend + b, b);
}
else {
return 1 - divide(dividend + b, b);
}
}
int product = b, result = 0;
while (a >= b) {
int q = 1;
while (a - product >= product) {
q = q << 1;
product = product << 1;
}
a = a - product;
product = b;
result += q;
}
return (neg) ? -result : result;
}
}
avatar
y*n
8
我觉得还是楼主写的好,如果没有任何附加条件的话。
avatar
a*r
9
这绝对是M家的真题
野蛮生长大牛,
可否请你解释一下你的算法?
大雨大牛,
我的肯定不对,印度哥说了。你能不能贡献一下你的代码?

【在 w*******8 的大作中提到】
: public class Solution {
: public int divide(int dividend, int divisor) {
: int a = Math.abs(dividend);
: int b = Math.abs(divisor);
: boolean neg = (dividend > 0 && divisor < 0) || (dividend < 0 &&
: divisor > 0);
: if (divisor == 0) {
: return Integer.MAX_VALUE;
: }
: if (divisor == Integer.MIN_VALUE) {

avatar
d*y
10
我想唯一的差别是能不能用/这个operator。

【在 a********r 的大作中提到】
: 这绝对是M家的真题
: 野蛮生长大牛,
: 可否请你解释一下你的算法?
: 大雨大牛,
: 我的肯定不对,印度哥说了。你能不能贡献一下你的代码?

avatar
s*r
11
前几天版上说印度傻逼transfer过来都有16万。
avatar
w*8
12
是小弱不是大牛
正刷题呢,看到是leetcode上原题就顺手把代码搬过来了
Divide Two Integers:
思路是:既然是int的除法,不用考虑小数部分(余数),就是整数(商),那就数
dividend 里有多少个divisor. 这样,如果商是n 需要O(n)计算,可以用下二分法,
divide&conquer 递归调用一下,就是lgN了
剩下的就是边界条件: 1)正负 2)极值
int 的范围是 -2,147,483,648 to 2,147,483,647
这里有个细节,当时看别人的代码觉得比较巧妙:
正负数的范围是不对称的
-2147483648 abs 一下还是自己本身,那就先count一次,再计算
之前看到很多方法是转成double 再强转回int,其实是没必要的
其他基本的int 计算也大多是这个思路 比如 int sqrt(int) int pow(int)

【在 a********r 的大作中提到】
: 这绝对是M家的真题
: 野蛮生长大牛,
: 可否请你解释一下你的算法?
: 大雨大牛,
: 我的肯定不对,印度哥说了。你能不能贡献一下你的代码?

avatar
m*s
13
public int divide(int dividend, int divisor) {
if (divisor == 0) throw new IllegalArgumentException();

long a = Math.abs((long)dividend);
long b = Math.abs((long)divisor);
int result = 0;
while (a >= b) {
long c = b;
for (int i = 0; c <= a; i++) {
a -= c;
result += 1 << i;
c <<= 1;
}
}
return ((dividend^divisor) >> 31) == 0 ? result : 0 - result;
}
avatar
q*l
14
LZ萌萌哒!
曾经有一个面试官让我写sort,我直接给了个Arrays.sort(A)
avatar
U*A
15
-2147483648 abs 一下还是自己本身,?
这个对吗?

【在 w*******8 的大作中提到】
: 是小弱不是大牛
: 正刷题呢,看到是leetcode上原题就顺手把代码搬过来了
: Divide Two Integers:
: 思路是:既然是int的除法,不用考虑小数部分(余数),就是整数(商),那就数
: dividend 里有多少个divisor. 这样,如果商是n 需要O(n)计算,可以用下二分法,
: divide&conquer 递归调用一下,就是lgN了
: 剩下的就是边界条件: 1)正负 2)极值
: int 的范围是 -2,147,483,648 to 2,147,483,647
: 这里有个细节,当时看别人的代码觉得比较巧妙:
: 正负数的范围是不对称的

avatar
m*r
16
哈哈哈 萌萌哒+1
avatar
t*e
17
对的,因为溢出了

【在 U***A 的大作中提到】
: -2147483648 abs 一下还是自己本身,?
: 这个对吗?

avatar
s*k
18
你这个 divide(1, 2) 的话, 结果是0.0

【在 a********r 的大作中提到】
: 要求实现:
: divide(int a, int b)
: 菜鸟写了一行
: return (double) a/b;
: 印度哥说不行
: 哪位达人能做一下这道题?
: 跪求!!!

avatar
f*g
19
刚试了,楼上计算结果0.5
avatar
r*e
20
位运算很不错。
然后前面的边界条件也都考虑到了。
只是Math.abs()没问题么???面试的时候是允许导入java.math.*么?
avatar
f*n
21
mark
avatar
q*z
22
楼主好萌
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。