【发布时间】:2020-12-07 17:24:43
【问题描述】:
问题是你写了一个程序来找到两个数字的 GCD,你应该定义一个函数来做到这一点,但挑战是函数体不应该超过 1 行,你只能使用一个分号!到目前为止,我尝试过并写了这个。你有什么想法吗?
#include <stdio.h>
int bmm(int m, int n) {
while(m!=n) int a = m > n ? m -= n : n -= m;
return m;
}
int main() {
int m, n;
scanf("%d%d", &m, &n);
if (m < 0)m = -m;
if (n < 0)n = -n;
printf("%d", bmm(m,n));
return 0;
}
【问题讨论】:
-
他们可能希望它是递归的。您还可以阅读有关 Euclid 的 GCD 算法的信息。它与您的相似,但效率更高(步骤更少)。
-
可以说
while(m!=n) int a = m > n ? m -= n : n -= m;是两行。您可以在一行上堆放任意数量的代码(受编译器限制)。 -
int gcd_euclid(int a, int b) { return a % b == 0 ? b : gcd(b, a % b); }
-
或
int bmm(int m, int n) { return n ? bmm(n, m % n) : m; }