您的位置:首页 > 其它

求两个数最大公约数

2015-10-29 19:28 573 查看
题目:

写一个程序,求两个正数的最大公约数。如1100100210001,120200021,求其最大公约数

分析:设两个数分别为x,y

求其最大公约数f(x,y),如果有x%2==0而y%2不等于0,那么可以

约简为f(x/2,y),同样道理适用于y

如果x与y都是偶数,那么最大公约数可以为f(x/2,y/2)*2

如果x与y都是奇数,那么最大公约数可以为f(y,x-y)

直到上述x-y为0,即为最大公约数

#include<iostream>
using namespace std;
//判断一个数是否偶数
int isEven(int x)
{
return (x % 2 == 0)? 1 : 0;
}
int maxCommonDivisor(int x, int y)
{
//如果x<y交换下位置
if (x < y)
return maxCommonDivisor(y, x);
else if (y == 0)
return x;
else
{
//如果x是偶数,y不是偶数
if (isEven(x))
{
//如果x是偶数y也是偶数,x和y都除2
if (isEven(y))
return (maxCommonDivisor(x >> 1, y >> 1) << 1);
//如果y不是偶数,则只有x除2
else
return maxCommonDivisor(x >> 1, y );
}
else
{
//如果y是偶数,则只有y除2
if (isEven(y))
return maxCommonDivisor(x, y >> 1);
//如果x和y都不是偶数,则相减
else
return maxCommonDivisor(y, x - y);
}
}
}
int main()
{
int x = 30, y = 42;
int commonDivisor = maxCommonDivisor(x, y);
cout << commonDivisor << endl;
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: