给定一个正整数n,求这个正整数进行数位升序排序(对各个数位进行升序排序)后的结果(首位如果为0则忽略0)。求帮助

给定一个正整数n,求这个正整数进行数位升序排序(对各个数位进行升序排序)后的结果(首位如果为0则忽略0)。求帮助
若输入8364790
则输出346789
0在首位就直接省略

img

#include<stdio.h>
void print(int t[],int n)
{
    int j=0;
    while(j<n)
    {
        if(t[j]!=0)
        {printf("%d",t[j]);}
        j++;
    }
}
void sort(int *t,int n)
{
    int j=0;
    while(j<n)
    {
        if(t[j]<t[j-1]&&j!=0)
        {
            int tem=t[j];
            t[j]=t[j-1];
            t[j-1]=tem;
            j--;
        }
        else
        {
            j++;
        }
    }
}
int ms(int n,int *t)
{
    while(n>9)
    {
        n=n/10;
        t[0]++;
    }
    return n;
}

int main()
{
    int n;
    scanf("%d",&n);
    int t[25];
    int j=0;
    int t2[1]= {0};
    int i;
    int tem2;
    while(n>9)
    {
        t2[0]=0;
        int tem=ms(n,t2);
        tem2=10;
        for(i = 1; i < t2[0]; i++)
        {
            tem2=tem2*10;
        }
        n=n-tem2*tem;
        t[j]=tem;
        j++;
    }
    t[j]=n;
    sort(t,j+1);
    print(t,j+1);
    return 0; 
}

用的一种比较另类的方式,不知道满足你要求不,代码如下:

#include <stdio.h>

int main(void){
    
    char n[32];
    int num[32];
    
    scanf("%s",n);
    
    int i=0;
    int j=0;
    //将整数读入数组 
    while(n[i]!='\0'){
        if(n[i]>='1'&&n[i]<='9'){
            num[j]=n[i]-'0';
            j++;
        }
        i++;
    }
    
    int k,temp;
    //排序数组 
    for(i=0;i<j-1;i++){
        for(k=i+1;k<j;k++){
            if(num[i]>num[k]){
                temp=num[i];
                num[i]=num[k];
                num[k]=temp;
            }
        }
    }
    
    //打印结果 
    for(i=0;i<j;i++){
        printf("%d",num[i]);
    }
    
    return 0;
}