Онлайн компилятор 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--){ while(b[i]>0){ printf("%d",i); b[i]--; } } return 0; }
这段代码的作用是:读入一个整数,将其各位数字提取出来,然后按从大到小的顺序重新排列并输出。例如输入 312,输出 321。

代码中有一个关键错误:在提取各位数字的循环里,没有更新 x_save 的值,导致循环无法正确遍历所有数位。

- 检查 for 循环中,每次循环后 x_save 的值是否发生了变化。目前循环体里只取了 x_save 的个位,但没有去掉这个个位,所以下一次循环取的还是同一个数字。
- 思考如何让 x_save 在每次循环后去掉最后一位,就像 while 循环中对 x 做的那样。