如何用C语言编写一个程序,计算两个正整数m和n的最大公约数(GCD)和最小公倍数(LCM),同时忽略输入中的负数和零?
时间: 2024-12-20 16:24:18 浏览: 10
在C语言中,可以使用欧几里得算法(Euclidean Algorithm)来计算最大公约数(GCD),然后利用公式 GCD(m, n) * LCM(m, n) = |m * n| 来求最小公倍数(LCM)。以下是简单的步骤:
1. 定义函数来检查输入是否为正整数:
```c
int is_positive(int num) {
if (num > 0)
return 1;
else
return 0;
}
```
2. 编写函数计算GCD:
```c
int gcd(int m, int n) {
while (n != 0) {
int temp = m % n;
m = n;
n = temp;
}
return m;
}
```
3. 根据GCD计算LCM:
```c
int lcm(int m, int n) {
return (m * n) / gcd(m, n);
}
```
4. 主函数处理用户输入并调用上述函数:
```c
int main() {
int m, n;
printf("请输入两个正整数(输入0结束):");
while (scanf("%d %d", &m, &n) == 2 && is_positive(m) && is_positive(n)) {
int result[GCD_LCM_COUNT] = {gcd(m, n), lcm(m, n)};
printf("最大公约数:%d\n", result[0]);
printf("最小公倍数:%d\n", result[1]);
printf("请输入两个正整数(输入0结束):");
}
return 0;
}
```
阅读全文