此题主要是考察工作经验,在日常工作中经验遇到内存不够的情况,在内存不够的情况,怎么不使用中间变量使两个变量的值进行交换呢?
代码实现:
#include<stdio.h>
#include <stdlib.h>
void swap1(int& a,int& b) //使用中间变量交换两个值
{
int temp = a;
a = b;
b = temp;
}
void swap2(int& a, int& b) //只用加法、减法、乘法也可以交换两个值
{
a = a + b;
b = a - b;
a = a - b;
}
void swap3(int& a, int& b) //使用位运算也可以交换两个值
{
a = a^b;
b = a^b;
a = a^b;
}
void main1mianshiti7()
{
int a1 = 1, b1 = 2;
int a2 = 10, b2 = 15;
int a3 = 78, b3 = 90;
int a = 2147483647, b = 1;
printf("a1=%p,b1=%p", &a1, &b1);
swap1(a1, b1);
swap2(a2, b2);
swap3(a3, b3);
printf("swap after~~~~~~~~~~~~~\n");
printf("a1=%d,b1=%d\n", a1, b1);
printf("a2=%d,b2=%d\n", a2, b2);
printf("a3=%d,b3=%d\n", a3, b3);
swap2(a, b);
printf("a=%d,b=%d\n", a, b);
system("pause");
}
第一种方法是最为常规的方法,在这里不做过多的介绍。
第二种方法是采用一种简单的加减法算法来达到交换两个值的目的。这种方法的缺点是做加法、减法、乘法的时候可能会导致数据溢出。
第三种犯法是采用按位异或的方式交换两个值。按位异或运算符"^"的功能是将参与运算符的两个数各对应的二进制位相依或,如果对应的二进制位相同,则结果为0,否则结果为1,。这样运算3次即可交换两个数。
补充:第二种方法在调试的时候,可以看到虽然你产生了溢出问题,但是交换操作依然是成功的。