题目来源:补昨天欠的题目,悄悄的说(昨天我去干大事儿去了,哈哈哈)
371(升级版).不用任何额外变量交换两个整数的值
1.问题描述
不用任何额外变量交换两个整数的值
示例:
输入: a = 1, b = 2
输出: a = 2, b = 1
在不借助任何额外变量的情况下完成交换
提示:用位运算
2.大神们的解决方案
方法(位运算):
int swap(int a, int b)
{
a = a^b; // 步骤1
b = a^b; // 步骤2
a = a^b; // 步骤3
// 设 a = a0 , b = b0
// 则 步骤1 a = a ^ b = a0 ^ b0, 而b没变 b = b0
// 步骤2 b = a ^ b = a0 ^ b0 ^ b0 (即将a=a0^b0带入)
// = a0 = a,
//此时 a = a0 ^ b0
// 步骤3 a = a0 ^ b0
// = a0 ^ a
// = a0 ^ a0 ^ b0
// = b0 = b ,
// 而 b = a 所有完成交换
//注:b0 ^ b0 = 0;
}
3.我的收获
又是栽在了 位运算里了。。。
突然感觉自己好菜。。。
2019/4/26 胡云层 于南京 65