程序员面试金典——解题总结: 9.17中等难题 17.1编写一个函数,不用临时变量,直接交换两个数

#include #include using namespace std;/*问题:编写一个函数,不用临时变量,直接交换两个数。分析:既然只提供两个数,那么只能通过这两个数的增加和减少来交换,缺少的临时变量必定通过这两个数本身起到了作用, 设两个数为a和b,那么原来交换有临时变量的写法是, temp = a , a = b, b = temp 不用临时
摘要由CSDN通过智能技术生成
#include <iostream>
#include <stdio.h>

using namespace std;

/*
问题:编写一个函数,不用临时变量,直接交换两个数。
分析:既然只提供两个数,那么只能通过这两个数的增加和减少来交换,缺少的临时变量必定通过这两个数本身起到了作用,
     设两个数为a和b,那么原来交换有临时变量的写法是,
	 temp = a  , 
	 a = b,
	 b = temp
	 不用临时变量,肯定就是a和b其中一个作为临时变量,不妨设为a , 如果a = b,就丢失a,不行,如果a = a也不行,那么可以用 a = a + b
	 a = a + b
	 b = a - b,此时b已经等于a
	 a = a - b,此时a等于b了
	 之所以不用 a = a * b
	            b = a / b,
				a = a / b,是因为不能保证b不为0

输入:
3 5 
输出:
5 3

书上解法:
关键:
1还可以用异或的方式:利用异或中相同两数异或结果为0,任意数和0异或结果为该数本身
a = a^b;//假设3或5,011 和 101,异或是: 110
b = a^b;// 等同于 (a^b)^b = a
a = a^b;//等同于 (a^b)^a = b
*/

void swap(int* ptrA , int* ptrB)
{
	*ptrA = *ptrA + *ptrB;
	*ptrB = *ptrA - *ptrB;
	*ptrA = *ptrA - *ptrB;
}

//异或进行交换
void swapXOR(int* ptrA , int* ptrB)
{
	*ptrA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值