交换两个数的多种算法
临时变量法
就相当于引入一个空瓶子t,将a里面的水先倒入空瓶子中,再将b中的水倒入a中,最后将空瓶子中的水再倒回b中,这样就完成了两个数的交换
#include<stdio.h>
int main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=a;
a=b;
b=t;
printf("%d %d",a,b);
return 0;
}
而如果不引入临时变量如何完成两个数的交换呢
第一种采用加减法
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
b=a+b;//两数之和
a=b-a;//原来b的值
b=b-a;//原来a的值
printf("%d %d",a,b);
return 0;
}
但是这种方法如果输入的整形数过大会出现溢出问题,而第二种则不会有溢出问题
第二种采用按位异或法
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
a=a^b;//b值不变
b=a^b;
a=a^b;//三次异或完成交换
printf("%d %d",a,b);
return 0;
}