关于交换两个整数的方法探究
2016年9月1日
备注:int 范围 -2^31~2^31-1 即-2147483648~2147483647 long long 范围 -2^63~2^63-1 即 -9223372036854775808~9223372036854775807
第一种方法:三变量法 特点:通用性强,简洁易懂
#include<iostream>
using namespace std;
typedef int type;
int main()
{
type a,b;
type t;
cin>>a>>b;
cout<<"a: "<<a<<" b: "<<b<<endl;
t=a;a=b;b=t;
cout<<"a: "<<a<<" b: "<<b<<endl;
return 0;
}
第二种方法:加减法 特点:不用临时变量
a=a+b;
b=a-b;
a=a-b;
//可能越界
a=a+b-(b=a);
//不会溢出
a=a-b;
b=a+b;
a=b-a;
//可能越界
第三种方法:异或法 特点:利用异或的性质
a=a^b;
b=a^b;
a=a^b;
//只用于整数
第四种方法:利用栈 特点:使用STL
#include<iostream>
#include<stack>
using namespace std;
typedef int type;
stack<type> s;
int main()
{
type a,b;
cin>>a>>b;
cout<<"a: "<<a<<" b: "<<b<<endl;
while(!s.empty()) s.pop();
s.push(a);
s.push(b);
a=s.top();
s.pop();
b=s.top();
cout<<"a: "<<a<<" b: "<<b<<endl;
return 0;
}
第五种方法:swap函数法 特点:简洁易用
swap(a,b);