编程之美读书笔记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;
}
#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;
}
相关文章推荐
- 《编程之美》2.7 最大公约数问题解法3改进
- 编程之美--2.7 最大公约数问题
- 编程之美2.7 最大公约数问题
- 编程之美读书笔记-最大公约数问题
- 2.7 最大公约数问题
- 编程之美 2.7 最大公约数 扩展问题之逆转一个整数的二进制表示
- 【编程之美】2.7最大公约数问题
- 编程之美2.7最大公约数问题Java版
- 编程之美 2.7 最大公约数问题
- 编程之美-2.7最大公约数问题java解法
- [编程之美] PSet2.7 最大公约数问题
- 编程之美 -- 2.7 最大公约数问题
- 编程之美: 第二章 数字之魅 2.7最大公约数问题
- 编程之美2.7——最大公约数问题
- 编程之美2.7 最大公约数问题
- 编程之美-2.7-最大公约数问题
- 《编程之美》学习笔记——2.7最大公约数问题
- 最大公约数问题(编程之美2.7)
- 编程之美之2.7 最大公约数问题
- 编程之美-2.7、最大公约数问题