题解:两个数的交换(第三变量 + 数学求和 + 异或法)
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