题目: 求N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.提供友好的输入输出,并进行输入数据的正确性验证。
算法设计
利用求二个数的最大公约数和最小公倍数的函数;二二进行比较将求出来的最大公约数或最大公倍数与下一位进行比较,直到比较到最后一位输出最大公约数或者最大公倍数。
源代码
#include<stdio.h>
#include<stdlib.h>
int divisor (int a,int b) /*自定义函数求两数的最大公约数*/
{
int temp; /*定义义整型变量*/
temp=(a>b)?b:a; /*采种条件运算表达式求出两个数中的最小值*/
while(temp>0)
{
if (a%temp==0&&b%temp==0) /*只要找到一个数能同时被a,b所整除,则中止循环*/
break;
temp--; /*如不满足if条件则变量自减,直到能被a,b所整除*/
}
return (temp); /*返回满足条件的数到主调函数处*/
}
int multiple (int a,int b)
{
int p,q,temp;
p=(a>b)?a:b; /*求两个数中的最大值*/
q=(a>b)?b:a; /*求两个数中的最小值*/
temp=p; /*最大值赋给p为变量自增作准备*/
while(1) /*利用循环语句来求满足条件的数值*/
{
if(p%q==0)
break; /*只要找到变量的和数能被a或b所整除,则中止循环*/
p+=temp; /*如果条件不满足则变量自身相加*/
}
return (p);
}
int main()
{
int s,t;//定义二个数字用来存放最大公约数和最小公倍数
int str[100];//定义一个存放数字的数组
int n;
printf("请输入你要输入的数字个数:(小于100)\n");
scanf("%d",&n);
printf("请输入数字:\n");
for(int k=0;k<n;k++)//利用for循环来进行数字的输入
{
scanf("%d",&str[k]);
}
for(int j=0;j<n-1;j++)//利用for循环二二一组求取最小公倍数
{
str[j+1]=multiple (str[j],str[j+1]);//调用求取最小公倍数的函数
t=str[j+1];
}
printf("最小公倍数为:%d",t);//输出最小公倍数
for(int i=0;i<n-1;i++)
{
str[i+1]=divisor (str[i],str[i+1]);//调用求取最大公约数
s=str[i+1];
}
printf("最大公约数为:%d\n",s);//输出最大公约数
getchar();
}
运行图片