交换两个数-c++实现

 

今天看了下交换数值的小程序,网上挺多的,整理了下,,因为参考较多,没一一给出链接,若原作者看到,可以留言,我会添加

 

// example_1_6_function_swap.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;


//done!!效率最高的
void point(int*a,int*b )
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
}
//done!!优点是不用中间变量,效率低
void point_jia_jian(int*a,int*b )
{
    
    *a=*a+*b;
    *b=*a-*b;
    *a=*a-*b;
}
//不要中间变量,位运算实现
//异或的运算规则是:相同为假,不同为真。
//真⊕假=真
//假⊕真=真
//假⊕假=假
//真⊕真=假
//因此,两个相同的数异或等于0,0与任何一个数异或等于那个数本身
//同或运算规则是:相同为真,不同为假
//真⊕假=假
//假⊕真=假
//假⊕假=真
//真⊕真=真
//因此,两个相同的数同或等于1,1与任何一个数同或等于那个数本身
void swap3(int*a,int*b)
{
  *a^=*b;
  *b^=*a;
  *a^=*b;
}

//通过四则运算实现,但是缺点是不能对原变量值进行交换,可用于交换整型和浮点型,但是浮点型会出现误差
void swap_jia_jian(int a,int b)
{
    /*done!!
    a=a+b;
    b=a-b;
    a=a-b;
    cout<<"交换后"<<endl;
    cout<<"X="<<a<<"  "<<"Y="<<b<<endl;*/
    
    /*
    a = a - b;
    b = a + b;
    a = b - a;
    cout<<"交换后"<<endl;
    cout<<"X="<<a<<"  "<<"Y="<<b<<endl;
    */
    
    //done!!
    a=a*b;
    b=a/b;
    a=a/b;
    cout<<"交换后"<<endl;
    cout<<"X="<<a<<"  "<<"Y="<<b<<endl;
}


//通过引用实现
void swap(int &a,int &b)
{
    int t;
    t=a;
    a=b;
    b=t;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int x=0,y=0;
    cout<<"请输入X="<<endl;
    cin>>x;
    cout<<"请输入Y="<<endl;
    cin>>y;
    cout<<"交换前"<<endl;
    cout<<"X="<<x<<"  "<<"Y="<<y<<endl;
    


    /*done!!
    swap3(&x,&y);
    cout<<"交换后"<<endl;
    cout<<"X="<<x<<"  "<<"Y="<<y<<endl;
    */
    /*done!!
    swap_jia_jian(x,y);
    */

    /*done!!
    point_jia_jian(x,y);
    */
    

    /*done!!
    point(&x,&y);
    cout<<"交换后"<<endl;
    cout<<"X="<<x<<"  "<<"Y="<<y<<endl;
    */

    /* done!!
    swap(x,y);
    cout<<"交换后"<<endl;
    cout<<"X="<<x<<"  "<<"Y="<<y<<endl;
    */

    system("pause");
    return 0;
}

 

转载于:https://www.cnblogs.com/20150705-yilushangyouni-Jacksu/p/4704817.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值