Онлайн компилятор C

#include <stdio.h> int main() { int n; // 输入非负整数 scanf("%d", &n); // 处理数字为0的特殊情况 if (n == 0) { printf("0 0"); return 0; } int min_digit = 9; int max_digit = 0; int temp = n; // 循环拆分每一位数字 while (temp > 0) { int digit = temp % 10; // 取出最后一位 if (digit < min_digit) min_digit = digit; if (digit > max_digit) max_digit = digit; temp = temp / 10; // 去掉最后一位 } printf("%d %d", min_digit, max_digit); return 0; }
这段代码的功能是:输入一个非负整数,找出它每一位数字中的最小值和最大值,并输出这两个值。代码逻辑基本正确,但有一个边界情况需要留意。

- 当输入的数字是0时,代码已经单独处理并输出"0 0",这是正确的。
- 对于其他数字,代码通过循环逐位取出数字并更新最小值和最大值,最终输出结果。

不过,代码中有一个潜在问题:如果输入的数字是负数,程序会直接跳过循环,导致min_digit和max_digit保持初始值(9和0),输出结果不正确。题目要求输入非负整数,但scanf没有对负数做校验。

- 提示1:考虑在输入后增加一个判断,如果n小于0,可以提示输入错误或直接处理为无效输入。
- 提示2:如果题目允许负数,需要将负数转换为正数处理,或者单独处理负号。但根据题目要求“非负整数”,建议增加输入合法性检查。