两个数交换值的几种方法

题目要求: 给定两个整形变量的值,将两个值的内容进行交换。

需要再创建临时变量的方法如下

方法一:

#include<stdio.h>
#include<Windows.h>
int main(){
	int num1 = 0;
	int num2 = 0;
	scanf("%d%d",&num1,&num2);
	printf("1:num1=%d,num2=%d\n",num1,num2);
	int tmp = 0;  //创建临时变量,将数值暂存于
	tmp = num1;
	num1 = num2;
	num2 = tmp;
	printf("2:num1=%d,num2=%d\n", num1, num2);
	system("pause");
	return 0;
}

就像有三个瓶子,其中两个中有水现在要求将两个有水瓶子中的水交换。则必须要借助于第三个空瓶子,才能将两个有水的瓶子中的水进行交换。

不需要创建临时变量的方法

方法二:

#include<stdio.h>
#include<Windows.h>

int main(){
	int num1 = 0;
	int num2 = 0;
	scanf("%d%d", &num1, &num2);
	printf("1:num1=%d,num2=%d\n", num1, num2);
	num1 = num1 + num2;
	num2 = num1 - num2;
	num1 = num1 - num2;
	printf("2:num1=%d,num2=%d\n", num1, num2);
	system("pause");
	return 0;
}
//缺点:若两个数特别大的时候,当两数相加会发生溢出现象,则会导致计算结果出现错误
//因此该方法适用于两个不太大的数(且两数之和也不太大)交换其值。

方法三:

#include<stdio.h>
#include<Windows.h>

int main(){
	int num1 = 0;
	int num2 = 0;
	scanf("%d%d", &num1, &num2);
//假定输入num1=10,num2=20
	printf("1:num1=%d,num2=%d\n", num1, num2);
//当num1=10时,其二进制:0000 0000 0000 0000 0000 0000 0000 1010
//当num1=20时,其二进制:0000 0000 0000 0000 0000 0000 0001 0100
	num1 = num1^num2;
//num1->0000 0000 0000 0000 0000 0000 0001 1110-->30
	num2 = num1^num2;
//num2->0000 0000 0000 0000 0000 0000 0000 1010-->10
	num1 = num1^num2;
//num1->0000 0000 0000 0000 0000 0000 0001 0100-->20
	printf("2:num1=%d,num2=%d\n", num1, num2);
	system("pause");
	return 0;
}

利用数据在计算机中的存储特点和异或的特点将两个数字的值进行交换(按位异或的特定为两个数对应位置的数相同结果为“0”,不同为“1”)

猜你喜欢

转载自blog.csdn.net/jack_wang128801/article/details/86777514