云淡风清

记录一下平常看过的好的文章

关于交换两个变量

int a = 1;

intb = 2;

 方法一:加减法

 a =a + b;

 b =a - b;

 a =a - b;

 方法二:异或操作

a = a ^ b;

b = a ^ b;

a = a ^ b;

方法三:乘除法

a = a * b ;

b = a / b ;

a = a / b ;

总结:
此题的本质就是求一种操作X,要保证X是可逆操作,设其逆操作为Y, 也即,若 p X q = r 成立,那么一定有 r Y q = p 成立
那么首先令
a = a X b;
这样a保存了a和b进行X操作后的结果
然后再
b = a Y b
因为此时a = a X b, 又因为Y是X的逆操作,所以此时 b = a
最后再
a = a Y b
此时a = a X b, 但是 b = a,所以 a = b

纵观上面几种方法,它们的操作都是可逆的
加法 <-> 减法
乘法 <-> 除法
异或 <-> 异或 (异或操作的逆操作是它本身)
阅读更多
个人分类: C++
上一篇按位反转字符串与整数
下一篇操作系统各大公司笔试题汇总
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭