两个数的交换

一般思路:创建一个临时变量,以这个临时变量为中间变量,利用赋值来完成两个数的内容的相互交换。

代码如下:

#include <stdio.h>
int main()
{
        int a=0;
        int b=0;
	int t=0;
	printf("交换前:\n");
	scanf("%d,%d",&a,&b);
	t=a;
	a=b;
	b=t;
	printf("交换后:\n");
	printf("%d,%d",a,b);
        return 0;
}
优化方案:

1.上述方法中需要另外创建一个变量,略微有些麻烦,若是要求不能创建临时变量,则可以采用数学上的加法来进行一些变通。

代码如下:

#include <stdio.h>
int main()
{   

        int a=0;
        int b=0;
	
	printf("交换前:\n");
	scanf("%d,%d",&a,&b);
	
	a=a+b;
	b=a-b;          //这里其实是将原本a的值赋给b
	a=a-b;          //这里其实是将原本b的值赋给a
	
	printf("交换后:\n");
	printf("%d,%d",a,b);
        return 0;
}

2.上述方案是巧妙的运用了一下加法,除了这种方法,其实可以采用位运算符来进行交换。方法与方案1类似,只不过是运用了一下位运算符中的位异或^。

位异或的大致作用是两个二进制数每个位上相同等于0,不同等于1【例如111000与101010的结果就是010010】,而对于一般数的运算【例如a^b^a=b】,也就是说相同数异或相互抵消。而下面这种方案就是通过运用这一原理。

代码如下:

 #include <stdio.h>
int main()
{       
        int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);

	printf("before: a = %d, b = %d\n", a, b);
	a = a ^ b;
	b = a ^ b; //a ^( b ^ b)  其实就是把a的值赋给b
	a = a ^ b; //a ^ b ^ a    <span style="font-family: Arial, Helvetica, sans-serif;">其实就是把b的值赋给a</span>

	printf("after : a = %d, b = %d\n", a, b);
        return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值