论坛首页 招聘求职论坛

今天去面试了一次。。悲剧了。。大家帮看看这题

浏览 25570 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2011-07-12  
异或异或异或异或
0 请登录后投票
   发表时间:2011-07-12  
marcolee 写道
  public void swap(int a ,int b){
b = a + b;

a = b - a;
b = b - a;

System.out.println(" a = " + a );
System.out.println(" b = " + b );
}

小心阿,这样有可能会越界
0 请登录后投票
   发表时间:2011-07-12  
出这种面试题的就是闲的蛋痛,有个叼用
0 请登录后投票
   发表时间:2011-07-12  
qwaz 写道
marcolee 写道
  public void swap(int a ,int b){
b = a + b;

a = b - a;
b = b - a;

System.out.println(" a = " + a );
System.out.println(" b = " + b );
}

小心阿,这样有可能会越界

怎么越界?
0 请登录后投票
   发表时间:2011-07-12  
marcolee 写道
  public void swap(int a ,int b){
b = a + b;

a = b - a;
b = b - a;

System.out.println(" a = " + a );
System.out.println(" b = " + b );
}

+1
0 请登录后投票
   发表时间:2011-07-12  
bloodstorm 写道

//交换a和b的值

public void swap(int a ,int b){
    int temp = a;
    a = b;
    b = temp;
}


要求:修改此方法,不能定义temp中间变量,实现值得交换

...没想到怎么搞。。。

这样的公司不去也罢,牺牲可读性的代码维护起来,你懂的
0 请登录后投票
   发表时间:2011-07-12  
b = a + 0*(a = b)
0 请登录后投票
   发表时间:2011-07-12  
a + b不会溢出么?
好像可以通过异或操作来的。
0 请登录后投票
   发表时间:2011-07-12  
lyw985 写道
jancy 写道
zhangyang6380006 写道
我记得我上次面试也问了这个,我当时顿住了,10钞后想出来了,没有第三变量,必然是两个变量相加和相减操作,a=a+b;b=a-b;a=a-b;

如果2个变量都是数字,这样可以
字符串的话,就不行了。
这样比较通用:
b ^= a ^= b ^= a;


写这么复杂。。。。。

实际上就是异或操作

a=a^b;
b=b^a;
a=b^a;

这个是正解。

很疑问,这道题究竟是考的啥能力?考察程序员是否变态?
0 请登录后投票
   发表时间:2011-07-12  
java不是传值的吗?
0 请登录后投票
论坛首页 招聘求职版

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