C++实现求N个数的最大公约数和最小公倍数
算法实现:
#include <iostream> using namespace std; int divisor(int a,int b); int ndivisor(int *a,int n); int multiple(int a,int b); int nmultiple(int *a,int b); int main() { cout<<"请选择计算的数据数量:"<<endl; int n; cin>>n; while(cin.fail()){ cout<<"Wrong, you have inputed a wrong type data\n"<<endl; cin.clear();//清除错误标记,重新打开输入流,但是输入流中依旧保留着之前的不匹配的类型 /*cin.sync();*///清除cin缓存区的数据。 while(cin.get() != '\n'){ continue; } cout<<"please input again"<<endl; cin>>n; } cout<<"请输入"<<n<<"个数据:"<<endl; int a[n]; for(int m=0;m<n;m++) cin>>a[m]; int div=ndivisor(a,n); int mul=nmultiple(a,n); cout<<"上述"<<n<<"个数字的最大公约数为:"<<div<<endl; cout<<"上述"<<n<<"个数字的最小公倍数为:"<<mul<<endl; return 0; } int divisor(int a,int b)//两个数求最大公约数 { int temp; if(a<b) { temp=a; a=b; b=temp; } while(b!=0) { temp=a%b; a=b; b=temp; } return a; } int ndivisor(int *a,int n)//n个数求最大公约数 { if(n==1) return(*a); return divisor(a[n-1],ndivisor(a,n-1)); } int multiple(int a,int b)//求最小公倍数 { int divisor(int a,int b); int temp=divisor(a,b); return(a*b/temp); } int nmultiple(int *a, int n)//求n个数的最小公倍数 { if (n == 1) return *a; else return multiple(a[n-1], nmultiple(a, n-1)); }
天晴了,起飞吧