在线编译器 C

#include <stdio.h> int main() { int unsigned num; int max = 0; int min = 0; scanf("%u", &num); if (num == 0) printf("0"); while (num > 0) { int d = num % 10; num = num / 10; if (d >= max) { max = d; } if (d <= min) { min = d; } } printf("%d %d", min, max); return 0; }
这段代码的目的是读取一个无符号整数,然后找出它的十进制表示中最大和最小的数字,并输出这两个数字。代码从个位开始逐位提取数字,并更新最大值和最小值。

代码中存在一个逻辑问题:变量 `min` 初始化为 0,但数字中可能没有 0,这会导致最小值判断出错。例如输入 123,min 会保持为 0,但实际最小数字是 1。

- 考虑如何初始化 `min`,使其能正确反映数字中的最小值。可以思考用第一个提取到的数字来初始化 `min` 和 `max`。
- 注意当输入为 0 时,代码已经单独处理了输出,但循环条件 `num > 0` 会跳过 0 的情况,所以需要确保 0 的情况也被正确处理。