不能创建临时变量(第三个变量),实现两个整数的交换

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。妙啊,太妙了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值