论坛首页 Java企业应用论坛

不用判断语句求俩数中的大(或者小)数

浏览 47951 次
精华帖 (0) :: 良好帖 (16) :: 新手帖 (3) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-12-10   最后修改:2009-12-10
我只知道肯定要用位运算,这样是最快的,至于是否用到加减乘除,我个人认为不需要,要用上的话还不如if else 快!
0 请登录后投票
   发表时间:2009-12-10  
int max(int a,int b){
        int[] max ={a,a,b};
        String ab = (a-b)+"";
        String ba = (b-a)+"";
        int index=ab.length()-ba.length()+1;
        return max[index];
}
0 请登录后投票
   发表时间:2009-12-10  
night_stalker 写道
Trustno1 写道
int max(int x,int y)
{
return x ^ ((x ^ y) & -(x < y));
}

这是 C …… 太适合做 bit 运算了。题目的难点之一便是用 java ……

嘛,各种奇怪的解答都是有的:
def max x, y
  [y, x, x][(x <=> y) + 1]
end


莫非我眼花 -(x < y)是boolean,用了它还需要什么位运算么。
0 请登录后投票
   发表时间:2009-12-10  
这题出的跟语言,速度没关系吧。
就是程序员的脑筋急转弯吧
0 请登录后投票
   发表时间:2009-12-10  
 int max(int a,int b){
  int [] num = {a,b};
  Arrays.sort(num);
  return num[1];
}
0 请登录后投票
   发表时间:2009-12-10   最后修改:2009-12-10
这题用数组方便的很嘛
int max(int a, int b) {
    int[] c = {a, b};
    int[][] d = {{c[(a - b) >>> 31], a}, {b, c[(a - b) >>> 31]}};
    return d[a >>> 31][b >>> 31];
}

出这题的人不大可能是考数学功底,主要还是看你脑子能不能转过弯来。
0 请登录后投票
   发表时间:2009-12-10  
superxielei 写道
int getMaxNum(int a,int b){
  double x = (double)a;
  double y = (double)b;
  return (int)(x/2+y/2+Math.abs(x/2-y/2));
}


题目不是要求,不能使用Math包么
0 请登录后投票
   发表时间:2009-12-10   最后修改:2009-12-10
int getMaxNum(int a,int b){
Set<Integer> set = new TreeSet<Integer>();
set.add(a);
set.add(b);
return set.toArray()[1];
}
只是不更好。
0 请登录后投票
   发表时间:2009-12-10  
Hooopo 写道
 min = (a + b - (a - b).abs) / 2.0



sorry,有人回复了........


不是不能用math函数吗
0 请登录后投票
   发表时间:2009-12-10  
还有楼主的try{}catch(){}也不可以用的,因为这也是一个系统默认的判断啊
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics