博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
程序员面试金典——解题总结: 9.17中等难题 17.1编写一个函数,不用临时变量,直接交换两个数
阅读量:3657 次
发布时间:2019-05-21

本文共 1009 字,大约阅读时间需要 3 分钟。

#include 
#include
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,异或是: 110b = a^b;// 等同于 (a^b)^b = aa = 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 ^= *ptrB; *ptrB ^= *ptrA; *ptrA ^= *ptrB;}void process(){ int a , b; while(cin >> a >> b) { int tempA = a; int tempB = b; swap(&a , &b); cout << a << " " << b << endl; /* swapXOR(&tempA , &tempB); cout << tempA << " " << tempB << endl; */ }}int main(int argc , char* argv[]){ process(); getchar(); return 0;}

转载地址:http://lmofn.baihongyu.com/

你可能感兴趣的文章
springboot中的日志框架
查看>>
springboot的MVC自动配置
查看>>
Springboot中对mvc进行扩展
查看>>
一文读懂HashMap
查看>>
ConcurrentModifcationException详解
查看>>
史上最全的PHP正则表达式
查看>>
理解Mysql prepare预处理语句
查看>>
预编译语句(Prepared Statements)介绍,以MySQL为例
查看>>
单利模式
查看>>
gdal学习笔记1-读取数据信息
查看>>
python关于print中数据传输的用法
查看>>
sublime text3的快捷键总结
查看>>
gdal学习笔记2-数据读写
查看>>
python中动态生成变量名及赋值
查看>>
python识别数据结构
查看>>
python bisect序列二分法详解
查看>>
python学习笔记字典排序,
查看>>
python内置类 set
查看>>
python getatrra()
查看>>
thinkpython2的扑克牌系列练习最终解读
查看>>