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