#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
程序员面试金典——解题总结: 9.17中等难题 17.1编写一个函数,不用临时变量,直接交换两个数
最新推荐文章于 2021-07-25 22:02:05 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)