在线编译器 C

#include <stdio.h> int main() { int a[10], count = 0; long long int n; scanf("%lld", &n); for (int i = 0; n > 0; i++) { a[i] = n % 10; n /= 10; count++; } int max = a[count - 1], q = count - 1; for (int i = 0; i < count; i++) { if (max < a[i]) { max = a[i]; q = i; } } a[q] = a[count - 1]; a[count - 1] = max; for (int i = count - 1; i >= 0; i--) { printf("%d", a[i]); } return 0; }
这段代码的作用是:读入一个整数,将其各位数字存入数组,然后找出最大的数字,把它和最后一位数字交换,最后输出交换后的数字。

代码的思路是先把数字的每一位从低位到高位存入数组,这样数组下标0对应个位,下标count-1对应最高位。然后找到最大数字的位置,把它和最高位交换,最后从最高位开始输出。

- 注意代码中寻找最大数字时,初始值设为`a[count-1]`(最高位),但循环是从下标0开始的。如果最高位本身就是最大值,这个逻辑没问题,但如果最大值出现在其他位置,初始值的选择可能会影响结果吗?思考一下当最大值出现在最高位时,交换操作会怎样。

- 另外,如果输入的数字是0,循环条件`n > 0`会直接不执行,导致数组为空,后续操作会出错。考虑一下如何处理输入为0的情况。