锁定老帖子 主题:不用判断语句求俩数中的大(或者小)数
精华帖 (0) :: 良好帖 (16) :: 新手帖 (3) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-10
或者
try{ int c = a-b + Integer.maxValue; return false; }catch(Exception){ return true; } |
|
返回顶楼 | |
发表时间:2009-12-10
guoapeng 写道 try{ try{ int c = a-b + Integer.maxValue; throw new ALessThanBException() }catch(Exception){ throw new AMoreThanBException() } }catch(ALessThanBException exp){ return false; }catch(AMoreThanBException){ return true; } 恩,这个也是异常的实现方式,而且不用管正负数 |
|
返回顶楼 | |
发表时间:2009-12-10
最后修改:2009-12-10
好吧,考虑溢出的,不管正负都 OK 的版本:
int r[][][] = {{{a,b}, {a,a}}, {{b,b}, {a,b}}}; return r[a >>> 31][b >>> 31][(a - b) >>> 31]; (刚刚又修改了一下,让它看起来更神奇 ) |
|
返回顶楼 | |
发表时间:2009-12-10
最后修改:2009-12-10
night_stalker 写道 tinywind 写道 static int max(int a, int b){
int r[]={a,b}; return r[(a-b)>>>31]; } (刚刚修改了:一开始没考虑到两个相等的情况 ……) 或者 int mask = ((a-b) >>> 31) - 1; return (a & mask) | (b & ~ mask); 贼个是与机器码相关的(IL也算某种机器码),虽然Java fix的int的长度。 |
|
返回顶楼 | |
发表时间:2009-12-10
haojia0716 写道 我也出一个题.
不能用任何语言,包括机器语言,汇编,中级语言,高级语言,比较两数大小,要求能在电脑上运行出结果. 你说那两个数分别是多少,我马上给出答案。 |
|
返回顶楼 | |
发表时间:2009-12-10
haojia0716 写道 我也出一个题.
不能用任何语言,包括机器语言,汇编,中级语言,高级语言,比较两数大小,要求能在电脑上运行出结果. 无聊吧,我自己在屏幕上按出结果成不 |
|
返回顶楼 | |
发表时间:2009-12-10
用hashmap 也可以实现:
c = a-b; 用移位操作取得符号位的值 0 或1 hashmap 里的初始值 0, true 1,false 然后根据符号位,取得 true 或者 false 返回。 |
|
返回顶楼 | |
发表时间:2009-12-10
64位机怎么办
|
|
返回顶楼 | |
发表时间:2009-12-10
呵呵,这个问题不错,引出这么多后续的有趣的问题
|
|
返回顶楼 | |
发表时间:2009-12-10
iaimstar 写道 64位机怎么办
java int 仍然是 32 位,标准规定了的。 |
|
返回顶楼 | |