Problem Description 编写函数 gcd(m, n) 来计算整数 m 和 n 的最大公约数。 测试程序为: #include <stdio.h> int gcd(int m, int n); int main(){ int a, b; while (scanf("%d %d", &a, &b) != EOF) { printf("%d\n", gcd(a, b)); } return 0;} /* 你的代码将被嵌在这里 */ Input Description 多组输入数据,每组一行,为两个正整数m, n,以空格分隔。 Output Description 对每组输入数据,在一行中输出其最大公约数。 Sample Input 12 16 9 7 2 10 Sample Output 4 1 2
时间: 2024-03-14 07:45:55 浏览: 69
以下是使用 C 语言编写的解法:
```c
#include <stdio.h>
int gcd(int m, int n) {
int r;
while (n != 0) {
r = m % n;
m = n;
n = r;
}
return m;
}
int main() {
int a, b;
while (scanf("%d %d", &a, &b) != EOF) {
printf("%d\n", gcd(a, b));
}
return 0;
}
```
解释如下:
我们可以使用辗转相除法来计算两个整数的最大公约数。具体来说,我们不断用较小的数去除较大的数,直到较大的数变成了 0,此时较小的数就是两个整数的最大公约数。
具体实现中,我们使用了一个 while 循环,每次计算出 m 除以 n 的余数 r,然后更新 m 为 n,n 为 r,直到 n 变成了 0,此时 m 就是两个整数的最大公约数。
最后,在主函数中读入测试数据,并且调用 gcd 函数进行计算,输出结果即可。
相关问题
完成程序,设计实现函数int gcd(int a,int b),其功能为计算给定的两个正整型数a和b的最大公约数。 函数接口定义: int gcd(int a,int b);/*功能为计算给定的两个正整型数a和b的最大公约数*/ 裁判测试程序样例: #include <stdio.h> /* 请在这里填写答案 */ int main(){ int a,b; scanf("%d%d",&a,&b); printf("%d",gcd(a,b)); return 0; } 输入格式: 请在一行中输入整数a和b的值,数据中间以空格为间隔。 输出格式: 对每一组输入的a和b,输出它们的最大公约数。
下面是求解最大公约数的代码实现:
```c
#include <stdio.h>
int gcd(int a, int b)
{
if (b == 0)
{
return a;
}
else
{
return gcd(b, a % b);
}
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d", gcd(a, b));
return 0;
}
```
在该程序中,gcd函数采用辗转相除法求解最大公约数。如果b等于0,那么a就是最大公约数;否则,递归调用gcd函数,将b和a%b作为参数传入,继续求解最大公约数。主函数中,读入a和b的值,然后输出它们的最大公约数。
编写c程序函数gcd(m,n)来计算整数m和n的最大公约数
编写C程序中的`gcd`函数来计算两个整数`m`和`n`的最大公约数,可以使用欧几里得算法(也称辗转相除法)。以下是该函数的一个简单实现:
```c
#include <stdio.h>
// 定义一个递归函数来计算最大公约数
int gcd(int m, int n) {
if (n == 0) { // 当n为零时,m就是最大公约数
return m;
} else {
return gcd(n, m % n); // 递归调用,将n替换为m除以n的余数
}
}
int main() {
int m, n;
printf("请输入两个整数: ");
scanf("%d %d", &m, &n);
// 计算并打印结果
int result = gcd(m, n);
printf("最大公约数(gcd)为: %d\n", result);
return 0;
}
```
在这个程序中,用户输入两个整数,然后`gcd`函数通过不断减小较大的数直到其中一个变为0,实现了两个数的最大公约数计算。
阅读全文