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

#include <stdio.h> int main(){ int x,x_save,count=0; scanf("%d",&x); x_save=x; while(x>0){ count++; x=x/10; }int a[count]; for(int i=0;i<count;i++){ a[i]=x_save%10; x_save=x_save/10; } for(int i=0;i<count;i++){ int num=count-1; while(num>=0){ if(a[i]>a[num]){ int temp=a[i]; a[num]=a[i]; a[i]=temp; break; } else num--; }printf("%d",a[i]); } return 0; }
这段代码的目的是将一个整数的各位数字按从大到小排序并输出。代码首先读取一个整数,然后计算它的位数,接着将各位数字存入数组,最后尝试排序并输出。

代码中存在逻辑错误,导致排序无法正确完成。

- 在排序部分,内层循环的交换逻辑有问题。当 `a[i] > a[num]` 时,你交换了 `a[i]` 和 `a[num]`,但交换后立即 `break`,这会导致只比较了部分元素,无法完成完整排序。而且交换语句中 `a[num] = a[i]` 写错了,应该是 `a[num] = temp`。

- 排序的思路需要重新考虑。目前的方法类似于选择排序,但实现不完整。你需要确保每个位置都找到正确的最大值,而不是遇到更大的就交换并停止。