求n个数的最大公约数。其中:2<=n<50 输入:n个正整数,以0作为数的结束。用空格隔开。 输出:最大公约数和这n个数,用一个空格隔开。 样例输入: 4928 4160 6144 0 样例输出: 64 4928 4160 6144
时间: 2024-12-28 12:30:00 浏览: 3
要求一组数的最大公约数(Greatest Common Divisor, GCD),你可以使用欧几里得算法(Euclidean Algorithm),也称为辗转相除法。这是一个递归的过程,直到找到两个数的最大公约数为1为止。对于多个数的情况,我们可以先找到前两个数的最大公约数,然后用这个结果和下一个数继续计算,直至处理完所有数。
以下是一个C语言程序示例,用于计算给定的n个正整数的最大公约数:
```c
#include <stdio.h>
// 辗转相除法求最大公约数
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
// 主函数处理输入并输出结果
void find_gcd(int arr[], int n) {
int result = arr[0];
for (int i = 1; i < n; ++i) {
result = gcd(result, arr[i]);
// 如果n >= 2并且当前已到达最后一个元素,则直接输出结果
if (i == n - 2) {
printf("%d ", result);
}
}
printf("%d\n", result); // 输出最终的最大公约数
}
int main() {
int n, num;
scanf("%d", &n);
int numbers[n]; // 存储输入的整数
for (int i = 0; i < n && scanf("%d", &num) != EOF; ++i) {
if (num == 0)
break;
numbers[i] = num;
}
find_gcd(numbers, n);
return 0;
}
```
当输入`4928 4160 6144 0`时,程序会计算这些数的最大公约数并输出结果。
阅读全文