c 语言 编写两个函数,用递归法求最大公约数,由最大公约数求得最小公倍数,并)编写两个函数,用递归法求最大公约数,由最大公约数求得最小公倍数,并在主函数中调用
时间: 2024-02-19 22:58:36 浏览: 72
好的,下面是两个递归函数的实现:
```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
```
可以看到,结果正确。
相关问题
c语言编写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入
下面是C语言实现的代码:
```c
#include <stdio.h>
// 求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 求最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
int max = gcd(num1, num2);
int min = lcm(num1, num2);
printf("%d和%d的最大公约数是%d\n", num1, num2, max);
printf("%d和%d的最小公倍数是%d\n", num1, num2, min);
return 0;
}
```
在这个程序中,我们定义了两个函数 `gcd()` 和 `lcm()`,分别用于求最大公约数和最小公倍数。在主函数中,我们通过 `scanf()` 函数从键盘中读入两个整数,并将它们作为参数传递给这两个函数。最终,我们使用 `printf()` 函数输出了最大公约数和最小公倍数的结果。
注意,这里我们使用了递归的方法来实现辗转相除法求最大公约数。在实际应用中,为了避免可能的栈溢出问题,可以使用非递归的实现方式。
java中编写三个函数,一个函数求最大公约数,一个函数求最大公倍数,然后在主函数中从键盘接收两个数,打印输出这两个数的最大公约数和最小公倍数。
### 回答1:
以下是Java代码:
```
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数:");
int num1 = scanner.nextInt();
System.out.print("请输入第二个数:");
int num2 = scanner.nextInt();
int gcd = getGcd(num1, num2);
int lcm = getLcm(num1, num2, gcd);
System.out.println(num1 + "和" + num2 + "的最大公约数为:" + gcd);
System.out.println(num1 + "和" + num2 + "的最小公倍数为:" + lcm);
}
// 求最大公约数
public static int getGcd(int num1, int num2) {
if (num2 == 0) {
return num1;
}
return getGcd(num2, num1 % num2);
}
// 求最小公倍数
public static int getLcm(int num1, int num2, int gcd) {
return num1 * num2 / gcd;
}
}
```
### 回答2:
在Java中编写函数求最大公约数和最小公倍数可以通过使用欧几里得算法来实现。
首先,我们可以编写一个函数来求最大公约数(GCD):
```java
public static int calculateGCD(int num1, int num2) {
if (num2 == 0) {
return num1;
}
return calculateGCD(num2, num1 % num2);
}
```
这个函数会递归地求解两个数的最大公约数,直到其中一个数变为0,此时另一个数就是最大公约数。
接下来,我们可以编写一个函数来求最小公倍数(LCM):
```java
public static int calculateLCM(int num1, int num2) {
int gcd = calculateGCD(num1, num2);
return (num1 * num2) / gcd;
}
```
这个函数会首先调用之前编写的求最大公约数的函数,然后用两个数的乘积除以最大公约数来求最小公倍数。
最后,在主函数中从键盘接收两个数,并打印输出它们的最大公约数和最小公倍数:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数:");
int num1 = scanner.nextInt();
System.out.print("请输入第二个数:");
int num2 = scanner.nextInt();
int gcd = calculateGCD(num1, num2);
int lcm = calculateLCM(num1, num2);
System.out.println("最大公约数为:" + gcd);
System.out.println("最小公倍数为:" + lcm);
}
}
```
通过运行主函数,我们可以从键盘接收两个数,并打印输出它们的最大公约数和最小公倍数。
### 回答3:
在Java中编写三个函数,一个函数用于求最大公约数,一个函数用于求最小公倍数。
1. 求最大公约数函数:
最大公约数是两个数的最大公约数。使用辗转相除法来实现:
```java
public static int gcd(int num1, int num2) {
while (num2 != 0) {
int temp = num2;
num2 = num1 % num2;
num1 = temp;
}
return num1;
}
```
2. 求最小公倍数函数:
最小公倍数是两个数的最小公倍数。可以通过两个数的乘积除以它们的最大公约数来实现:
```java
public static int lcm(int num1, int num2) {
return (num1 * num2) / gcd(num1, num2);
}
```
3. 主函数中从键盘接收两个数,并打印输出它们的最大公约数和最小公倍数:
```java
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个数:");
int num1 = scanner.nextInt();
System.out.print("请输入第二个数:");
int num2 = scanner.nextInt();
int gcdResult = gcd(num1, num2);
int lcmResult = lcm(num1, num2);
System.out.println("最大公约数为:" + gcdResult);
System.out.println("最小公倍数为:" + lcmResult);
}
```
这样,你就可以通过输入两个数,得到它们的最大公约数和最小公倍数了。
阅读全文