以下是求最大公约数和最小公倍数的C语言代码:
#include <stdio.h>
int gcd(int m, int n); // 函数原型声明
int main() {
int m, n;
printf("请输入两个正整数:\n");
scanf("%d%d", &m, &n);
int g = gcd(m, n);
int l = m * n / g;
printf("最大公约数为:%d\n", g);
printf("最小公倍数为:%d\n", l);
return 0;
}
// 求最大公约数
int gcd(int m, int n) {
if (m % n == 0)
return n;
else
return gcd(n, m % n);
}
该程序中,首先从用户处输入两个正整数m和n。然后使用递归算法求它们的最大公约数。最后根据最大公约数计算最小公倍数并输出结果。
注意:此程序假设用户输入的是两个正整数。如果用户可能输入非正整数,则需要添加验证。
更详细的回复
编写一个名为gcd.c的程序,可以让用户输入两个正整数m和n(m,n>0),并计算它们的最大公约数和最小公倍数。
实现方式如下:
- 使用while循环确保用户输入的是正整数:
int m, n;
printf("请输入两个正整数m和n:");
while (scanf("%d %d", &m, &n) != 2 || m <= 0 || n <= 0) {
printf("输入无效,请重新输入:\n");
while (getchar() != '\n'); // 清除输入缓冲区
}
- 使用辗转相减法求最大公约数:
int gcd(int a, int b) {
if (a == b) return a;
if (a < b) return gcd(b, a);
return gcd(a - b, b);
}
int ans_gcd = gcd(m, n);
- 使用最大公约数求最小公倍数:
int lcm = m * n / ans_gcd;
完整代码如下:
#include<stdio.h>
// 辗转相减法求最大公约数
int gcd(int a, int b) {
if (a == b) return a;
if (a < b) return gcd(b, a);
return gcd(a - b, b);
}
int main() {
int m, n;
printf("请输入两个正整数m和n:");
while (scanf("%d %d", &m, &n) != 2 || m <= 0 || n <= 0) {
printf("输入无效,请重新输入:\n");
while (getchar() != '\n'); // 清除输入缓冲区
}
int ans_gcd = gcd(m, n);
int lcm = m * n / ans_gcd;
printf("%d和%d的最大公约数是%d,最小公倍数是%d\n", m, n, ans_gcd, lcm);
return 0;
}
示例运行:
请输入两个正整数m和n:14 21
14和21的最大公约数是7,最小公倍数是42