程序员面试题精选(47):两个或N个数的最大公约数和最小公倍数的求解
2007-12-07 21:13
316 查看
代码实现如下:
#include <iostream>
using namespace std;
int GetG(int m,int n)
{
if(m<n)
{
m^=n;
n^=m;
m^=n;
}
if(n==0)
return m;
return GetG(n,m%n);
}
int GetNG(int* arr,int n)
{
//int imax=arr[0];
//for(int i=1;i<n;i++)
//imax=getZuidagongyue(imax,arr[i]);
//return imax;
if(n==1)
return *arr;
return GetG(arr[n-1],GetNG(arr,n-1));
}
/*int GetG(int *arr, int len)
{
int iMax = arr[0], iCurr, iRemainder;
for(int i = 1; i < len; i++)
{
iCurr = arr[i];
if (iMax < iCurr)
{
iMax ^= iCurr;
iCurr ^= iMax;
iMax ^= iCurr;
}
iRemainder = iMax % iCurr;
while (iRemainder)
{
iMax = iCurr;
iCurr = iRemainder;
iRemainder = iMax % iCurr;
}
iMax = iCurr;
}//for
return iMax;
}
*/
int GetLCM(int m,int n)
{
return m*n/GetG(m,n);
}
int GetNLCM(int *arr, int len)
{
if(len==1)
return *arr;
return GetLCM(arr[len-1],GetNLCM(arr,len-1));
}
int main()
{
cout<<"-----------------G-------------------"<<endl;
cout<<"5767 and 4453 : "<<GetG(5767,4453)<<endl;
int arr[6]={10,15,250,40,30,80};
cout<<"10,15,250,40,30 and 80 : "<<GetNG(arr,6)<<endl;
cout<<"-----------------LCM-------------------"<<endl;
cout<<"10,15,250,40,30 and 80 : "<<GetNLCM(arr,6)<<endl;
getchar();
return 0;
}
我晕,csdn不让发含G*C*D单词的文章!
#include <iostream>
using namespace std;
int GetG(int m,int n)
{
if(m<n)
{
m^=n;
n^=m;
m^=n;
}
if(n==0)
return m;
return GetG(n,m%n);
}
int GetNG(int* arr,int n)
{
//int imax=arr[0];
//for(int i=1;i<n;i++)
//imax=getZuidagongyue(imax,arr[i]);
//return imax;
if(n==1)
return *arr;
return GetG(arr[n-1],GetNG(arr,n-1));
}
/*int GetG(int *arr, int len)
{
int iMax = arr[0], iCurr, iRemainder;
for(int i = 1; i < len; i++)
{
iCurr = arr[i];
if (iMax < iCurr)
{
iMax ^= iCurr;
iCurr ^= iMax;
iMax ^= iCurr;
}
iRemainder = iMax % iCurr;
while (iRemainder)
{
iMax = iCurr;
iCurr = iRemainder;
iRemainder = iMax % iCurr;
}
iMax = iCurr;
}//for
return iMax;
}
*/
int GetLCM(int m,int n)
{
return m*n/GetG(m,n);
}
int GetNLCM(int *arr, int len)
{
if(len==1)
return *arr;
return GetLCM(arr[len-1],GetNLCM(arr,len-1));
}
int main()
{
cout<<"-----------------G-------------------"<<endl;
cout<<"5767 and 4453 : "<<GetG(5767,4453)<<endl;
int arr[6]={10,15,250,40,30,80};
cout<<"10,15,250,40,30 and 80 : "<<GetNG(arr,6)<<endl;
cout<<"-----------------LCM-------------------"<<endl;
cout<<"10,15,250,40,30 and 80 : "<<GetNLCM(arr,6)<<endl;
getchar();
return 0;
}
我晕,csdn不让发含G*C*D单词的文章!
相关文章推荐
- java基础-利用基本循环语句计算输入的两个整数的最大公约数和最小公倍数
- 第11周 oj 求两个整数的最大公约数和最小公倍数
- 关于求两个正整数的最大公约数和最小公倍数的此C程序
- 编写两个函数,分别求由键盘输入两个整数的最大公约数和最小公倍数。用主函数调用这两个函数,并输出结果
- 第十一周OJ(5)求两个整数的最大公约数和最小公倍数
- wikioi 1012最大公约数和最小公倍数【根据最大公约数和最小公倍数求原来的两个数a、b】
- 第十一周OJ5求两个整数的最大公约数和最小公倍数
- 两个正数的最大公约数和最小公倍数的两种算法
- 求两个正整数的最大公约数和最小公倍数!
- 输入两个数,求最大公约数和最小公倍数
- 求两个整数的最大公约数和最小公倍数
- 辗转相除法求两个正整数的最大公约数和最小公倍数,要求键盘输入正整数。
- 利用辗转相除法求两个整数的最大公约数和最小公倍数。
- 输入两个整数n和m,求最大公约数和最小公倍数.Cpp
- 第十一周OJ——求两个整数的最大公约数和最小公倍数
- 求两个整数的最大公约数和最小公倍数
- 求两个数m,n的最大公约数和最小公倍数
- 编写函数,分别求两个整数的最大公约数和最小公倍数.
- 3.输入两个数,求最大公约数和最小公倍数。
- 求两个整数的最大公约数和最小公倍数