如果可以使用临时变量以实现交换两个整数的话,那么很简单。就像我们平时想交换两个盘子中的食物一样,可以使用一个空盘子。代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
int main()
{
int a = 0, b = 0, temp = 0;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
temp = a;
a = b;
b = temp;
printf("the sorted numbers:");
printf("%d %d\n", a, b);
system("pause");
return 0;
}
可是在不允许创建临时变量的情况下,如何交换两个数的内容呢?
法一:使用加减法(存在溢出的风险,不建议使用)
假如 a 为10,b为20:
第一步:a = a + b 后 a为30
第二步:b = a - b 此时 a为30,b为20,相减结果为 b = 10
第三步:a = a - b 此时a为30,b为10,相减结果为 a = 20
//法一
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
int main()
{
int a = 0, b = 0;
printf("input 2 numbers:\n");
scanf("%d,%d", &a, &b);
a = a + b;
b = a - b;
a = a - b;
printf("the changed numbers:\n");
printf("%d,%d\n", a, b);
system("pause");
return 0;
}
法二:使用二进制异或(相同为0,相异为1)
假如 a为10,b为20
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
int main()
{
int a = 0, b = 0;
printf("input 2 numbers:\n");
scanf("%d,%d", &a, &b);
a ^= b;
b ^= a;
a ^= b;
printf("the changed numbers:\n");
printf("%d,%d\n", a, b);
system("pause");
return 0;
}