Online Compiler C

#include <stdio.h> int main(){ int c=0; int a,i,b; scanf("%d",&a); int const N=100; int A[N]; while(a>0){ A[c]=a%10; c++; a=a/10; } int max=0; for(i=0;i<c-1;i++){ if (A[i]>A[max]){ max=i; } } for(i=0;i<c-1;i++){ b=A[0]; A[0]=A[max]; A[max]=b; } for(i=0;i<c-1;i++){ printf("%d",A[i]); } return 0; }
这段代码的目的是将一个整数的各位数字提取出来,然后找到其中最大的数字,并把它交换到数组的第一个位置,最后输出交换后的数字序列。

代码存在几个问题:

- 第一个循环结束后,变量 `c` 记录了数字的位数,但后续循环的条件 `i < c-1` 会导致最后一个数字被忽略,因为数组索引从0到c-1共c个元素,循环条件应该是 `i < c` 而不是 `i < c-1`。

- 第二个循环中,你找到了最大数字的位置 `max`,但紧接着的第三个循环却重复执行了多次交换操作。实际上,你只需要将 `A[0]` 与 `A[max]` 交换一次即可,不需要用循环重复做。

- 另外,如果输入的数字是负数,代码会直接跳过循环,导致没有输出。你可以思考一下如何处理负数的情况。