在线编译器 C

#include <stdio.h> int nod(int a, int b) { int c; while (b != 0) { c = a % b; a = b; b = c; } return a; } int main() { int x, y; scanf("%d%d", &x, &y); printf("%d", nod(x, y)); return 0; }
这段代码实现了计算两个整数的最大公约数(GCD)的功能,使用了欧几里得算法(辗转相除法)。程序从标准输入读取两个整数,然后调用 `nod` 函数计算并输出它们的最大公约数。

- 在 `nod` 函数中,循环条件 `while (b != 0)` 是正确的,但注意当输入为负数时,取模运算的结果可能为负,这会导致算法行为异常。考虑如何处理负数的情况,比如在函数开始时将参数取绝对值。
- 另外,如果输入包含零(例如 `x=0` 或 `y=0`),当前代码可能返回非零值,但数学上0和任何数的最大公约数是那个非零数本身。检查一下当其中一个数为0时,循环是否还能正确工作。