本文共 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/