用c语言a, b = map(int, input().split()) def gcd(a, b): if a == 0: return b return gcd(b % a, a) if a == 0 or b == 0: print(0) else: lcm = abs(a * b) // gcd(a, b) print(lcm)
时间: 2024-03-06 07:51:10 浏览: 249
C语言中没有Python中的 `map` 和 `input` 函数,需要使用 `scanf` 或者 `fgets` 来读入输入。以下是用C语言实现这段代码的示例:
```c
#include <stdio.h>
#include <stdlib.h>
int gcd(int a, int b)
{
if (a == 0) {
return b;
}
return gcd(b % a, a);
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
if (a == 0 || b == 0) {
printf("0\n");
} else {
int lcm = abs(a * b) / gcd(a, b);
printf("%d\n", lcm);
}
return 0;
}
```
解释一下代码:
首先定义了求最大公约数的函数 `gcd(a, b)`,和Python代码中的一样。
然后在 `main` 函数中,使用 `scanf` 读入两个整数 a 和 b。
接下来,如果 a 或 b 有一个是零,那么最小公倍数就是零,直接输出 0。
否则,根据最小公倍数的定义,它等于 a 和 b 的乘积除以它们的最大公约数的绝对值。
最后输出最小公倍数 lcm。
注意:C语言中的 `abs` 函数需要包含头文件 `stdlib.h`。
相关问题
def gcd(a, b): """ 求两个正数的最大公约数 """ while b: a, b = b, a % b return adef lcm(a, b): """ 求两个正数的最小公倍数 """ return a * b // gcd(a, b)if __name__ == '__main__': a = int(input("请输入第一个正数:")) b = int(input("请输入第二个正数:")) print("最大公约数为:", gcd(a, b)) print("最小公倍数为:", lcm(a, b))转化为C语言
下面是将 Python 代码转化为 C 语言代码的结果:
```
#include <stdio.h>
int gcd(int a, int b) {
while (b) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int a, b;
printf("请输入第一个正数:");
scanf("%d", &a);
printf("请输入第二个正数:");
scanf("%d", &b);
printf("最大公约数为:%d\n", gcd(a, b));
printf("最小公倍数为:%d\n", lcm(a, b));
return 0;
}
```
需要注意的是,在 C 语言中,需要在使用变量前先声明。因此,我们需要在函数前面声明函数的名称和参数类型。此外,Python 中的多重赋值语句需要用中间变量来实现。
C语言:本关任务:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入,如果输入的数中包含负数,则输出Input Error。 已给出:#include<stdio.h> /********** Begin *********/ /********** End *********/ void main() { int a,b,gcd; int lcd; scanf("%d%d",&a,&b); if(a<0 || b<0) printf("Input Error"); else { gcd=fgcd(a,b); lcd=flcd(a,b); printf("%d %d\n",gcd,lcd); } }
C语言代码如下:
```c
#include<stdio.h>
int fgcd(int a, int b)
{
int gcd = 1;
for (int i=1; i<=a && i<=b; i++)
{
if (a%i==0 && b%i==0)
gcd = i;
}
return gcd;
}
int flcd(int a, int b)
{
int lcd;
lcd = (a > b) ? a : b;
while (1)
{
if (lcd%a==0 && lcd%b==0)
break;
lcd++;
}
return lcd;
}
void main()
{
int a, b, gcd, lcd;
scanf("%d%d", &a, &b);
if (a < 0 || b < 0)
printf("Input Error");
else
{
gcd = fgcd(a, b);
lcd = flcd(a, b);
printf("%d %d\n", gcd, lcd);
}
}
```
首先我们需要实现两个函数:fgcd() 用于求两个整数的最大公约数,flcd() 用于求两个整数的最小公倍数。
在 fgcd() 函数中,我们从 1 到 a 和 b 中较小的那个数依次枚举,如果同时能够整除 a 和 b,则更新最大公约数 gcd 的值。
在 flcd() 函数中,我们首先将 lcd 初始化为 a 和 b 中的较大值,然后在循环中依次枚举 lcd 的值,如果同时能够整除 a 和 b,则找到了最小公倍数,跳出循环。
在主函数中,我们首先读入两个整数 a 和 b,如果两个整数中有任意一个是负数,则输出 "Input Error"。否则,我们调用 fgcd() 和 flcd() 函数分别求出最大公约数和最小公倍数,并输出结果。
注意:在 C 语言中,main() 函数的返回值类型应该是 int,而非 void。因此,正确的写法应该是:
```c
int main()
{
// ...
return 0;
}
```
阅读全文