从交换两个变量的值来看程序员的“奇技淫巧”

来看一道简单的题目:交换两个整型变量a、b的值。

 在我们日常写程序时,应该经常会遇到上面的问题,很简单。借用一个第三方变量,很容易实现。代码如下:

temp = a;
a = b;
b = temp;

然而,在某些情况下,比如说面试,面试官可能对这个答案不太满意,那么,能不能不用第三方变量实现交换a、b 的值呢?  

当然可以。不用第三方变量也有多种方法,比如说下面这种:

 

1 a = a + b;
2 b = a - b;
3 a = a - b;
View Code

 

回答上面的方法,面试官可能还是不太满意,因为两个整型变量相加会有越界的风险。既然相加会有越界的风险,那么改成相减吧。

代码如下:

1 a = a - b;
2 b = a + b;
3 a = b - a;
View Code

上面的方法,可能还不是面试官想要的,面试官想要的答案可能是位运算。虽然位运算在实际工作中用到的很少,但是用位运算显得逼格高,面试官更乐意听到位运算的答案。

代码如下:

1 a = a ^ b;
2 b = a ^ b;
3 a = a ^ b;
View Code

终于得到了面试官想要的答案,那么,还有更简单的方法嘛?或者说,还有更“巧”的办法嘛?

看下面的代码:

1 int main(){
2     int a  = 0,b = 0;
3     cin >> a >> b;
4     cout << b << " " << a << endl;
5     return 0;
6 }
View Code

运行结果:

实现了交换两个变量的值。

当然,最后一种方法是开玩笑了~

 

posted @ 2015-09-26 22:35  acBool  阅读(173)  评论(0编辑  收藏  举报