Online Compiler C

#include <stdio.h> int main() { int n, a, b = 0, min = 0, max = 0,s_n; scanf("%d", &n); 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; }
这段代码试图找出一个整数中最小和最大的数字,但逻辑有误。它每次循环只比较相邻两位数字,而不是全局比较所有数字,因此结果不正确。

- 你的循环每次只比较当前位和下一位,但最大值和最小值需要在整个数字的所有位中比较。你应该用一个变量记录当前看到的最大值,另一个记录最小值,然后每次取一位数字与它们比较。
- 注意变量初始化的值:`min` 和 `max` 初始为 0 可能不合适,因为如果数字中所有位都大于 0,`min` 会错误地保持为 0。考虑用数字的第一位来初始化它们。