题目要求
求解N个数的最大公约数和最小公倍数。用C或C++或java或python语言实现程序解决问题。
1.程序风格良好(使用自定义注释模板)
2.提供友好的输入输出,并进行输入数据的正确性验证。
算法实现(程序源代码)
#include <stdio.h>
/* gcd()函数实现对两数最大公约数的求解 */
int gcd(int m, int n)
{
int temp;
if(m<n)
{
temp = m;
m = n;
n = temp;
}
while(n!=0)
{
temp = m%n;
m = n;
n = temp;
}
return(m);
}
/* lcm()函数实现对两数最小公倍数的求解 */
int lcm(int m, int n)
{
int gcd(int m, int n);
int temp;
temp = gcd(m, n);
return(m*n/temp);
}
/* max_common_divisor()函数实现对一组数最大公约数的求解 */
int max_common_divisor(int a[], int p)
{
int i = a[0];
int j = a[1];
int k = gcd(i, j); // k存放一组数的最大公约数,通过调用gcd()函数求k
int r = 0;
/* 通过for循环依次从数组中取出每个数,求其与k的最大公约数 */
for(r=2; r<p; r++)
{
k = gcd(k, a[r]); // 更新k的值
}
return(k);
}
/* min_coommon_multipe()函数实现对一组数最小公倍数的求解 */
int min_common_multiple(int a[], int p)
{
int i = a[0];
int j = a[1];
int k = lcm(i, j); // k存放一组数的最小公倍数,通过调用lcm()函数求k
int r = 0;
for(r=2; r<p; r++)
{
k = lcm(k, a[r]);
}
return(k);
}
void main()
{
int x, y; // x存放整组数的最大公约数,y存放整组数的最小公倍数
int p; // p存放用户键入整数的个数,作为循环的判断条件
int i;
int a[1000]; //定义数组a
printf("请输入您即将输入整数的个数:\n");
scanf("%d", &p);
printf("请输入所要求解的整数:\n");
for(i=0; i<p; i++) // 通过for循环为数组赋值
scanf("%d", &a[i]);
x = max_common_divisor(a, p);
y = min_common_multiple(a, p);
printf("该组数的最大公约数为:%d\n", x);
printf("该组数的最小公倍数为:%d\n", y);
}