您的位置:首页 > 职场人生

程序员面试题精选(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单词的文章!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 iostream ini c