您的位置:首页 > 编程语言

编程之美读书笔记2.7—最大公约数问题

2014-12-06 16:04 316 查看
1.辗转相除法



#include <iostream>
using namespace std;

int gcd(int x,int y)
{
return (!y)?x:gcd(y,x%y);
}

int main()
{
int n1=42,n2=30;
cout<<gcd(n1,n2);

return 0;
}

2.减法



#include <iostream>
using namespace std;

int gcd(int x,int y)
{
if(x<y)
return gcd(y,x);
return (!y)?x:gcd(y,x%y);
}

int main()
{
int n1=42,n2=30;
cout<<gcd(n1,n2);

return 0;
}
3.对上述两种算法的结合



#include <iostream>
using namespace std;
int gcd(int x,int y)
{
if(x<y)
return gcd(y,x);
if(y==0)
return x;
else
{
if(x%2==0) //偶数
{
if(y%2==0)
{
return (gcd(x>>1,y>>1)<<1);
}
else
{
return gcd(x>>1,y);
}
}
else
{
if(y%2==0)
{
return gcd(x,y>>1);
}
else
{
return gcd(y,x-y);
}
}
}
}

int main()
{
int n1=42,n2=30;
cout<<gcd(n1,n2);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: