c 语言 编写两个函数,用递归法求最大公约数,由最大公约数求得最小公倍数,并在主函数中调用它
时间: 2024-02-18 07:02:22 浏览: 27
下面是递归求最大公约数和最小公倍数的 C 语言代码:
```c
#include <stdio.h>
// 递归求最大公约数
int gcd(int m, int n) {
if (n == 0) {
return m;
} else {
return gcd(n, m % n);
}
}
// 由最大公约数求最小公倍数
int lcm(int m, int n) {
return m * n / gcd(m, n);
}
int main() {
int a, b;
printf("请输入两个整数:");
scanf("%d%d", &a, &b);
printf("%d和%d的最大公约数是%d\n", a, b, gcd(a, b));
printf("%d和%d的最小公倍数是%d\n", a, b, lcm(a, b));
return 0;
}
```
在主函数中,我们先读入两个整数 `a` 和 `b`,然后分别调用 `gcd` 函数和 `lcm` 函数求最大公约数和最小公倍数,并输出结果。其中,`gcd` 函数中的递归求法是辗转相除法,而 `lcm` 函数则是通过最大公约数求得的。
相关问题
编写两个函数用递归法求最大公约数由最大公约数求得最小公倍数并在主函数中调用这两个函数
好的,这个问题我可以回答。请看以下代码:
```c
#include <stdio.h>
int gcd(int a, int b); // 求最大公约数函数
int lcm(int a, int b, int g); // 由最大公约数求最小公倍数函数
int main()
{
int a, b, g, l;
printf("Please enter two positive integers separated by a space: ");
scanf("%d %d", &a, &b);
g = gcd(a, b); // 求最大公约数
l = lcm(a, b, g); // 由最大公约数求最小公倍数
printf("GCD: %d\n", g);
printf("LCM: %d\n", l);
return 0;
}
int gcd(int a, int b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
}
int lcm(int a, int b, int g)
{
return a * b / g;
}
```
在这个程序中,我们首先定义了两个函数 `gcd` 和 `lcm`,它们分别计算最大公约数和最小公倍数。其中 `gcd` 函数用到了递归,它不断将较大的数除以较小的数取余,直到余数为 0,此时较小的数即为两个数的最大公约数。`lcm` 函数则根据公式 LCM(a, b) = a * b / GCD(a, b) 计算最小公倍数。在主函数中,我们先输入两个正整数,然后调用 `gcd` 函数求最大公约数,再用它调用 `lcm` 函数求最小公倍数,并输出结果。
希望这个程序能够满足您的需求。
c 语言 编写两个函数,用递归法求最大公约数,由最大公约数求得最小公倍数,并)编写两个函数,用递归法求最大公约数,由最大公约数求得最小公倍数,并在主函数中调用
好的,下面是两个递归函数的实现:
```c
#include <stdio.h>
int gcd(int a, int b)
{
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
int lcm(int a, int b)
{
return a * b / gcd(a, b);
}
int main()
{
int a = 15, b = 20;
printf("a = %d, b = %d\n", a, b);
printf("gcd = %d\n", gcd(a, b));
printf("lcm = %d\n", lcm(a, b));
return 0;
}
```
首先是求最大公约数的递归函数 `gcd`,若 `b` 为 0,则返回 `a`,否则递归调用 `gcd` 函数,传入参数为 `b` 和 `a % b`。
然后是求最小公倍数的递归函数 `lcm`,直接调用 `gcd` 函数,然后用 `a * b` 除以最大公约数即可。
在主函数中,我们定义了两个整数 `a` 和 `b`,调用 `gcd` 和 `lcm` 函数,并打印结果。
输出如下:
```
a = 15, b = 20
gcd = 5
lcm = 60
```
可以看到,结果正确。