不借助第三方变量,交换两个整型数x和y的值


主要思路是用其中一变量存储x,y的运算值,然后逆运算得到

  1. /****************************************************************/    
  2. /*****   不借助第三方变量,交换两个整型数x和y的值   ****/    
  3. /****************************************************************/    
  4. void swap()     
  5. {     
  6.     int x, y;     
  7.     x=5;     
  8.     y=10;     
  9.     /*函数声明,引用传地址但未用第三方变量*/    
  10.     void swap1(int &x, int &y); /* 方法1 */    
  11.     void swap2(int &x, int &y); /* 方法2 */    
  12.     void swap3(int &x, int &y); /* 方法3 */    
  13.     printf("\n原始值:x=%d, y=%d\n", x, y);     
  14.     swap3(x, y);     
  15.     printf("\n交换后:x=%d, y=%d\n", x, y);     
  16. }     
  17.     
  18. /****************************************/    
  19. /*******  方法1:算术运算(加减)   *******/    
  20. /****************************************/    
  21. void swap1(int &x, int &y)     
  22. {     
  23.     x=x+y; /* x存储x与y的和值(核心思想:x同时先把x和y两者的信息都存储下来) */    
  24.     y=x-y; /* 保持x内存和值不变,y先赋值,即减去y的原始值使其等于x原始的值 */    
  25.     x=x-y; /* 保持x内存和值不变,x再赋值,即减去y现在存储的原始x值,更新x值为原始y的值 */    
  26. }     
  27. /**************************************************************/    
  28. /*******  方法2:算术运算(乘除、指数运算、三角运算等)   *******/    
  29. /**************************************************************/    
  30. void swap2(int &x, int &y)     
  31. {     
  32.     x=x*y; /* x存储x与y的积值,核心思想同方法1,x同时先把x和y两者的信息都存储下来,本方法以乘除为例 */    
  33.     y=x/y; /* 保持x内存积值不变,y先赋值,即除去y的原始值使其等于x原始的值 */    
  34.     x=x/y; /* 保持x内存积值不变,x再赋值,即除去y现在存储的原始x值,更新x值为原始y的值 */    
  35. }     
  36. /****************************************/    
  37. /*******  方法3:逻辑运算(异或)   *******/    
  38. /****************************************/    
  39. void swap3(int &x, int &y)     
  40. {     
  41.     x^=y; /* x存储x与y的异或值(核心思想同上,即x先存储x和y两者信息(异或表示)) */    
  42.     y^=x; /* 保持x内存和值不变,y先赋值,即利用x异或反转y的原始值使其等于x原始的值 */    
  43.     x^=y; /* 保持x内存和值不变,x再赋值,即利用x异或反转y的原始值使其等于y原始的值 */    
  44. }     




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值