数位重构后的最大正整数。求帮助🙏

给定一个正整数n
求这个数进行数位集合重构(使用n所包含的不重复数字几个重新组合)就能得到的最大正整数
eg:输入3839449
输出9843


#include <stdio.h>
int main()
{
    int n,i,fre[10] = {0},res = 0;
    scanf("%d",&n);
    while(n > 0){
        fre[n % 10]++;
        n /= 10;
    }
    for(i = 9;i > 0;i--){
        if(fre[i] > 0){
            res = res * 10 + i;
        }
    }
    printf("%d",res);
    return 0;
}

一个又臭又长的实现,供参考:


#include <stdio.h>

int maxNewNum(int n);

int main(void){
    
    int n;
    int max;
        

    
    scanf("%d",&n);
    printf("n=%d\n",n);
    max = maxNewNum(n);
    printf("%d",max);
    

    return 0;
}

int maxNewNum(int n){
    
    int oriNum = n;
    int midNum=0;
    int arr[32];    
    int i = 0;
    int temp;
    int weight=1;
    
    //把整数分解到数组 
    while(midNum!=oriNum){
        temp=n%10;
        arr[i]=temp;
        n=n/10;        
        midNum+=temp*weight;
        //printf("temp=%d,n=%d,midNum=%d,weight=%d\n",temp,n,midNum,weight);
        weight*=10;
        i++;
    }
    
    //找出不同的数放入数组 
    int notSameArr[i];
    int notSameNum=0;
    int same=1;
    int j,k;
    for(j=0;j<i;j++){
        temp=arr[j];
        for(k=0;k<notSameNum;k++){
            if(temp==notSameArr[k]){
                same=0;
            }
        }
        if(same==1){
            notSameArr[notSameNum]= temp;
        //    printf("notSameNum=%d,temp=%d\n",notSameNum,temp);
            notSameNum++;
        }
        same=1;
    }    
    
//    for(j=0;j<notSameNum;j++){
//        printf("notSameArr[%d]=%d\n",j,notSameArr[j]);
//    }

    //从小到达大排序 
    for(j=0;j<notSameNum-1;j++){
        for(k=j+1;k<notSameNum;k++){
            if(notSameArr[j]>notSameArr[k]){
                temp=notSameArr[j];
                notSameArr[j]=notSameArr[k];
                notSameArr[k]=temp;
            }
        }
    }
    
//    for(j=0;j<notSameNum;j++){
//        printf("notSameArr[%d]=%d\n",j,notSameArr[j]);
//    }
    
    //组成最大的数 
    int max =0;
    weight=1;
    for(j=0;j<notSameNum;j++){
        max+=weight*notSameArr[j];
    //    printf("max=%d,weight=%d,notSameArr[%d]=%d\n",max,weight,j,notSameArr[j]);
        weight*=10;
    }
    
    return max;
}