给定两个整形变量的值,将两个值的内容进行交换
思路:不考虑空间复杂度时
使用一个中间变量存储,再交换
#include <stdio.h>
int main() {
// insert code here...
int a = 0, b = 0, change = 0;
scanf("%d%d", &a, &b);
change = a;
a = b;
b = change;
printf("交换后,a = %d, b = %d\n", a, b);
return 0;
}
当不允许创建临时变量,交换两个数的内容时:
思路:用a存储a+b的值,则交换后b的值为a-b(为原来a的值)
交换后a的值为此时a中存储的(a+b)- 此时b中存储的(a)同理可以使用乘法实现
#include <stdio.h>
int main() {
// insert code here...
int a = 0, b = 0;
scanf("%d%d", &a, &b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后,a = %d, b = %d\n", a, b);
return 0;
}
***为了防止溢出,可以使用按位异或的方式,按照二进制按位异或的方式进行计算,如果相同则为0,如果不同则为1(逻辑上不易想到)
#include <stdio.h>
int main() {
// insert code here...
int a = 0, b = 0;
scanf("%d%d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后,a = %d, b = %d\n", a, b);
return 0;
}
运行结果: