// Note:Your choice is C++ IDE //问题描述:求n个整数的最大公约数 //和公倍数; //问题的思路:n个数的公倍数是n-1个数的公倍数与 //剩余一个数求公倍数, //即(a1,a2,a3)=((a1,a2),a3);公约数的求法亦然;. #include"stdafx.h" #include<iostream> int mindiv(int f,int s); int maxmul(int f,int s); using namespace std; int main() { int n; int*a; cout<<"请输入数据个数:"<<endl; cin>>n; a=new int[n]; cout<<endl; cout<<"请依次输入"<<n<<"个数的值:"<<endl; for(int i=0;i<n;i++) cin>>a[i];
int mid_temp=mindiv(a[0],a[1]); int max_temp=maxmul(a[0],a[1]); if(n>=2) { for(int i=2;i<n;i++) { mid_temp=mindiv(mid_temp,a[i]); max_temp=maxmul(max_temp,a[i]); } }
cout<<"n个数的最大公约数:"<<mid_temp<<endl; cout<<"n个数的最小公倍数:"<<max_temp<<endl;
}
int mindiv(int f,int s) { if(f<=s) { int temp1=f; f=s; s=temp1; } /*if(f%s==0) return s; else { int temp=f%s; f=s; s=temp; return (f,s); }*/
//或这样写 while(f%s!=0) { int temp=f%s; f=s; s=temp; }
return s; }
int maxmul(int f,int s) { int mindiv_temp=mindiv(f,s); return (f*s)/mindiv_temp; } |