一、题目
基本要求: 求N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.提供友好的输入输出,并进行输入数据的正确性验证。
二、设计思路
三、源代码
#include <stdio.h>
#define N 100
int check(int t[],int n); //检查输入是否正确(函数声明)
int input(int t[]) //输入函数
{
int i,n;
int k=1;
printf("请输入所计算值的数目:");
scanf("%d",&n);
while (k)
{
printf("请输入您想要查询的数值:\n");
for (i=0;i<n;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&t[i]);
}
k=check(t,n); //调用输入判断函数
}
return n;
}
int check(int t[],int n) //输入判断函数,检查输入值是否有0
{
int i;
for (i=0;i<n;i++)
{
if (t[i]==0)
{
printf("您输入的数值有0,请重新输入。\n");
return 1;
}
}
return 0;
}
int gcd1(int a,int b) //2个数求最大公约数(穷举法)
{
int t;
for (t=a;t>0;t--)
{
if(a%t==0&&b%t==0)
return t;
}
}
int gcd2(int t[],int n) //n个数求最大公约数
{
int i;
int c=t[0];
for (i=1;i<n;i++)
{
c=gcd1(c,t[i]);
}
return c;
}
int mul1(int x,int y) //2个数求最小公倍数
{
return x*y/gcd1(x,y);
}
int mul2(int t[],int n) //n个数求最小公倍数
{
int i;
int s=1;
for (i=0;i<n;i++)
{
s=mul1(s,t[i]);
}
return s;
}
int main()
{
int t[N];
int n;
int choose=1;
while (choose) //判断是否继续进行
{
n=input(t);
printf("最大公约数为 %d\n",gcd2(t,n)); //输出gcd2函数返回值,最大公约数
printf("最小公倍数为 %d\n",mul2(t,n)); //输出mul2函数返回值,最小公倍数
printf("退出请按0,继续请按1 :");
scanf("%d",&choose);
}
return 0;
}
四、
- 运行结果、测试及调试
运行结果
五、心得体会
通过此次编程再次理解了用穷举法求去求最大公约数和最小公倍数,在检查输入的正确性时刚开始用的是循环结果一直无法跳出循环,之后改成了两个函数,一个输入函数一个检查函数,通过函数调用实现检查输入的正确性,n个数的最大公约数和最小公倍数先利用函数求两个数在进行调用实现功能。