不允许创建临时变量,交换两个数的值(方法总结)

不允许创建临时变量,交换两个数的值

方法1:这道题要用到这样一个算法
定义两个整形变量x,y,然后算法过程如下:
x=x+y;//将x+y的值赋给x
y=x-y;//将x-y的值赋给y
x=x-y;//将x-y的值赋给x
做完这三步,就可以达到在不创建临时变量的情况之下,交换两个数的值
代码如下
#include<stdio.h>
#include<windows.h>
int main()
{
int x;
int y;
printf(“请输入两个数字:”);
scanf_s("%d %d", &x, &y);
x = x + y;
y = x - y;
x = x - y;
printf(“这两个数交换后的值为:%d %d”, x, y);
system(“pause”);
return 0;
}
运行结果如下:
在这里插入图片描述
方法2:方法2其实是方法1的一个拓展
当通过x,y的加减可以达到在不创建临时变量的情况下交换两个整形变量的值
我推论出了以下算法:通过x,y的乘除达到在不创建临时变量的情况下交换两个整形变量的值
x=x*y;
y=x/y;
x=x/y;
代码如下
#include<stdio.h>
#include<windows.h>
int main()
{
int x;
int y;
printf(“请你输入你要交换的两个数字:”);
scanf_s("%d %d", &x, &y);
x = x * y;
y = x/y;
x = x / y;
printf(“这两个数交换后的顺序为%d %d”,x,y);
system(“pause”);
return 0;

}
输出结果如下图所示
在这里插入图片描述
注意:以为题目要求的是整形变量,所以方法2在两个数中有非整形变量时是不满足的.因为当两个数中有非整形变量时,是不满足除法的运算的.
方法3 基于按位异或的方式,按照二进制按位异或的方式来进行运算,如果相同则为0,如果不相同则为1
//这种方式的逻辑思路相对较为复杂,但是本质上与方法1的思路是类似的
//假如说输入的两个数为30和40
//在命令中输入calc调出计算器
//可以看到30和40转化为二进制
在这里插入图片描述
在这里插入图片描述
//可以看到转化为2进制的结果
//30—>011110
//40—>101000
//然后根据异或的规律进行运算
//记住异或运算的规律 相同为0 不同为1
代码如下
//在不创建临时变量的情况之下,交换两个变量的值
//其实本质上与方法2中加减的方法是一个道理,只不过是在计算机内部以二进制的方式进行运算
//注意:二进制异或的运算方式为,相同为0,不同为1;
//这种方法其实也是效率最高的一种
//关于输入的值得转化,可以通过系统自带的计算器进行转化
#include<stdio.h>
#include<windows.h>
int main()
{
int a = 30;
int b = 40;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf(“交换之后的数值为%d %d”, a,b);
system(“pasue”);
return 0;
}
运行结果如下
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值