1.完整题目
题目:实现两个整数的交换(不能创建临时变量)。
2.问题剖析
这是一道变态面试题,并且这个题很有意思,因此我就把它记录下来了。当看到这个题目的时候,第一眼是非常简单,但是第二眼看到限制条件的时候突然蒙住了。我们普遍交换变量的想法就是创建一个赋值为零的变量当作“空瓶子”来实现这两个整数的交换。
这是我们用了第三个变量实现的交换,显然这违背题意。
3.解法一
这种方法巧妙的运用了简单的算法来实现题目要求,a = a + b 是关键。它储存了a,b的总和。这个时候总和减去b的值就是a,然后将这个值赋给b就实现了b值的交换。此时b值是原本的a的值。a一开始就被赋值为a,b的总和。因此a - b就是实现了a值的交换。
如图:
3. 解法二
这个解法太巧妙了而且很难想到,主要运用了x ^ x = 0;x ^ 0 = x;这两个公式,其中(a ^ b) ^ b = a,把a的值赋值给b,(a ^ b) ^ a = b则是把b的值给a。妙啊,太妙了。