题目:求最大公约数
输入一组正整数(数量小于20),输出其最大公约数。
输入:121 33 44 11 1111
输出:11
基本思路:
输入一组正整数(数量小于20),输出其最大公约数。
输入:121 33 44 11 1111
输出:11
基本思路:
先求前两个数的的最大公约数,再用这个公约数和第三个数求最大公约数,以此类推。。。。。。。。。。。
#include<iostream>
using namespace std;
int gcb(int a,int b);
int gcb2(int a,int b);
int main()
{
int N,m1,m2;
cout<<"你要输入多少个参数:";
cin>>N;
int *a=new int[N] ;
for(int i=0;i<N;i++)
{
cout<<"请输入第"<<i<<"个参数的值:";
cin>>a[i];
cout<<endl;
}
m1=a[0];
m2=a[1];
for(int i=2;i<N;i++)
{
//cout<<m1<<" "<<m2<<endl;
m1=gcb(m1,m2);
m2=a[i];
}
cout<<m1;
return -1;
}
// 辗转相除法
/*
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
*/
int gcb(int a,int b)
{
int c,m=-1;
if(a<b) //确保a 大于 b
{
c=a;
a=b;
b=c;
}
while(m!=0)
{
m=a%b;
a=b;
b=m;
}
return a;
}
// 相减法
/*
有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a=b,则a(或b)即为两数的最大公约数
④ 若a≠b,则再回去执行①
例如求27和15的最大公约数过程为:
27-15=12( 15>12 ) 15-12=3( 12>3 )
12-3=9( 9>3 ) 9-3=6( 6>3 )
6-3=3( 3==3 )
因此,3即为最大公约数*/
int gcb2(int a,int b)
{
int temp;
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}