Online Compiler C

#include <stdio.h> int nod(int a, int b) { int c = 1, max, m, n; while (c <= a && c <= b) { m = a / c; n = b / c; if (m == n) { max = c; } c++; } return max; } int main() { printf("%d", nod(3, 4)); return 0; }
这段代码试图计算两个数的最大公约数(GCD),但逻辑有误。它遍历从1到较小数的所有整数,检查a/c和b/c是否相等,但这种方法并不能正确找到最大公约数。

- 你的判断条件 `m == n` 实际上是在检查 a/c 和 b/c 是否相等,这等价于 a 和 b 相等,而不是找到公约数。例如,当 a=3, b=4 时,任何 c 都不会让 m 和 n 相等,所以 max 保持未初始化状态,导致未定义行为。
- 正确的思路应该是检查 c 是否能同时整除 a 和 b,即 a % c == 0 && b % c == 0。你需要修改循环内的判断条件,而不是比较除法结果。