在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d", &n); if (n < 0) n = -n; if (n == 0) { printf("%d %d", n, n); return 0; } int max = 0, min = 9; while (n > 0) { int x = n % 10; if (max <= x) max = x; if (min >= x) min = x; n = n / 10; } printf("%d %d", min, max); return 0; }
这段代码的功能是:读入一个整数,输出它的各位数字中的最小数字和最大数字。代码先处理负数(取绝对值),然后通过循环逐位提取数字并更新最小值和最大值。

- 注意:当输入为负数时,代码用 `n = -n` 转为正数,但 `int` 类型能表示的最小负数(如 -2147483648)取绝对值后会溢出,导致结果错误。可以考虑用 `long` 或 `unsigned` 类型来避免这个问题。
- 另外,如果输入的数字包含前导零(例如 1020),当前逻辑能正确处理,但注意循环条件 `n > 0` 会跳过数字 0 本身,不过你已经在前面单独处理了 n==0 的情况,所以没问题。