Online Compiler C

#include <stdio.h> int main() { int n, a, b = 0, min = 0, max = 0,s_n; //scanf("%d", &n); n=1235; s_n = n; while (n != 0) { a = n % 10; b = (n / 10) % 10; if (a > b) max = a; else max = b; n = n / 10; } n = s_n; while (n != 0) { a = n % 10; b = (n / 10) % 10; if (a > b) min = b; else min = a; n = n / 10; } printf("%d %d", min, max); return 0; }
这段代码试图找出一个整数的各位数字中的最小值和最大值,但逻辑有误。它每次循环只比较相邻两位数字,而不是全局比较所有位。

- 第一个循环中,你比较了当前位 `a` 和下一位 `b`,然后直接赋值给 `max`。这样 `max` 只记录了最后一次比较的结果,而不是整个数字中的最大值。例如数字 1235,循环会依次比较 5和3、3和2、2和1,最终 `max` 变成 2,但实际最大值是 5。
- 第二个循环同理,`min` 也只记录了最后一次比较中较小的那个数,而不是全局最小值。

你需要思考如何用一个变量来记录当前找到的最大值(或最小值),并在遍历每一位时不断更新它,而不是只比较相邻两位。