求n个数的最大公约数和最小公倍数C++

一、问题描述
求n个数的最大公约数和最小公倍数。
二、解题思路
1、首先我们可以利用辗转相除法编写一个函数gcd(int a,int b)来求出两个数的最大公约数,然后将输入的n个数放进数组a[100]中,编写一个函数GCD(int a[],int n)函数利用for循环来依次求解每两个数的最大公约数,最后得到n个数的最大公约数。
2、求出两个数的最大公约数后,若k是a和b的最大公约数,那么a和b的最小公倍数为ab/k。编写函数lcm(int a,int b)求出两个数的最小公倍数,利用循环结构遍历一次数组即可求出n个数的最小公倍数。
3、在进行数据的正确性验证时,我们可以编写一个检验函数inspect(int a[],int n)来判断输入的数字中是否存在0,若存在则重新输入。
三、主要代码
1、检验函数int inspect(int a[],int n) //判断输入的数字中是否含有0
{ for(int i=0;i<n;i++)
{ if(a[i]==0)
{cout<<“输入的数字中含有0,错误!”;
return 1;
}
}
return 0 ; }
2、求n个数的最大公约数
Int gcd(int a,int b) //求两个数的最大公约数
{ int temp; if(a<b) //使得a必须大于b
{ temp=a;
a=b;
b=temp;
}
while(b!=0) //通过循环求两个数的余数,直到余数为0
{ temp=a%b; a=b; b=temp; }
return(a);
}
Int GCD(int a[],int n) //求n个数的最大公约数
{ int i; int c=a[0];
for (i=1;i<n;i++) //利用for循环 调用求两个最大公约数的函数来求n个数得最大公约数 { c=gcd(c,a[i]);}
return c;}
3、求n个数的最小公倍数
Int lcm(int x,int y) //求两个数的最小公倍数
{ return x
y/gcd(x,y); }
Int LCM(int a[],int n) //求n个数的最小公倍数
{ int i; int s=1;
for (i=0;i<n;i++)
{s=lcm(s,a[i]);}
return s;}
四、算法设计思路


五、调试,测试及运行结果
输入数字,结果输出个数的最大公约数和最小公倍数。
在这里插入图片描述
六、经验总结 刚开始看见这个题目的时候,我只想到用辗转相除法来求两个数的最大公约数和最小公倍数。然后网上查询以后知道要再利用一个for循环来把输入的数字保存到数组里遍历,先求前两个数的最大公约数,再用前两个数的最大公约数来和第三个数求它们的最大公约数,就这样依次进行,最后求出n个数的最大公约数和最小公倍数。从这个题目中我也学会了如何将数学思维转换成编程语言。
代码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42578646/article/details/88747490