您的位置:首页 > 其它

swap VS gcd的多种实现方式

2013-06-15 05:02 330 查看
swap很常见,这里总结可以实现swap功能的方式:

提倡用第一种办法(STL库采用该方法),异或或加减并没有减少时间,相反,异或会增加运算量,不具有实用性.

#include<iostream>
#include<stack>
using namespace std;
void swap_normal(int& a,int& b)
{
int temp=a;
a=b;
b=temp;

}

void swap_stack(int& a,int& b)
{
stack<int> st;
st.push(a);
st.push(b);
a=st.top();
st.pop();
b=st.top();
st.pop();
}

void swap_add(int& a,int& b)
{
a=a+b;
b=a-b;
a=a-b;
}
void swap_mul(int& a,int& b)
{
a=a*b;
b=a/b;
a=a/b;
}
void swap_xor(int& a,int& b)
{
if(a != b)
{
a^=b;
b^=a;
a^=b;
}
}
int main()
{
int a,b;
while(1)
{
cin>>a>>b;
swap_stack(a,b);
cout<<a<<" "<<b<<endl;
}
return 0;
}

gcd很常见,这里总结可以实现gcd功能的方式:常见的有欧几里德算法,递归式和迭代式,减法实现和除法取模实现。

#include<iostream>
using namespace std;

int gcd1(int m,int n)
{
if(n == 0)
return m;
else
return gcd1(n, m % n);
}
int gcd2(int m,int n)
{
int r;
do
{
r=m % n;
m=n;
n=r;
}while(r);
return m;
}

int gcd3(int m, int n)
{
while (m != 0 && n != 0)
{
if (n >= m)
n -= m;
else
m -= n;
}
if( m==0 )
return n;
else
return m;
}

int gcd4(int m, int n)
{
int t;
while (m != 0)
{
if (n >= m)
n -= m;
else
{
t = m; m = n; n = t;//swap(m,n)
}
}
return n;
}

void main()
{
cout<<gcd1(12,8)<<endl;
cout<<gcd2(12,8)<<endl;
cout<<gcd3(12,8)<<endl;
cout<<gcd4(12,8)<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: