题解:两个数的交换(第三变量 + 数学求和 + 异或法)
1.题目
题目如下:请交换两个整形变量的数值,且不使用第三临时变量
2.第三变量法
int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
int temp = a;
a = b;
b = temp;
printf("swap later: a = %d; b = %d", a, b);
优点:常规且效率高
缺点:借用第三临时变量
3.数学方法
int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("swap later: a = %d; b = %d", a, b);
缺点:溢出风险
4.异或方法
int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("swap later: a = %d; b = %d", a, b);
缺点:
- 可读性差
- 仅适用于整形
- 效率低
EOF