Онлайн компилятор 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],b[10]={0},num; for(int i=0;i<count;i++){ a[i]=x_save%10; num=a[i]; b[num]++; } for(int i=9;i>=0;i--){ if(b[i]>0){ printf("%d",a[i]); } } return 0; }
这段代码试图将一个整数的各位数字按从大到小的顺序输出,但存在逻辑错误。

代码首先将整数按位拆分存入数组a,同时用数组b统计每个数字出现的次数。最后从9到0遍历b数组,当某个数字出现次数大于0时,打印a[i]。这里a[i]是原数字的某一位,而不是当前遍历的数字i本身。

- 在统计数字出现次数的循环中,`num=a[i]` 后,`b[num]++` 是正确的,但后续打印时应该输出当前遍历的数字i,而不是a[i]。
- 另外,打印时应该根据b[i]的值重复输出i多次,而不是只输出一次。例如如果数字3出现了两次,应该输出两个3。