翻转排序
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给你一组正整数,请编写一个程序把每个整数翻转,然后按升序排序输出,翻转后前面的零要消掉。
输入
第一个整数n(1≤n≤106)表明有多少个数字需要处理,接下来是n个整数。整数已空格分开,每行可以有任意多的整数。输入的整数≤1012。
输出
n行排好序的整数。
示例输入
10 5 2233 1601 90100 13009 802 50000000 301 7654321 210
示例输出
5 5 12 103 109 208 1061 3322 90031 1234567
提示
#include <stdio.h>
#include <string.h>
long long a[1000000];
void qsort(long long *a,long long star,long long fin)//快拍函数
{
long long key=a[star],i=star,j=fin;
if(star>=fin)
return;
while(i<j)
{
while(i<j&&a[j]>=key) j--;
a[i]=a[j];
while(i<j&&a[i]<=key) i++;
a[j]=a[i];
}
a[i]=key;
qsort(a,star,i-1);
qsort(a,i+1,fin);
}
int main()
{
long long n,i,j,k,s=0;
scanf("%lld",&n);
memset(a,0,sizeof(a));//将数组a置零
for(i=0;i<n;i++)
{
long long da,b[20],m=0;
scanf("%lld",&da);//输入一个数da
while(da)
{
b[m]=da%10;
da=da/10;
m++;
}//数组b 用来 逆序 存放数字da的 各位 数字
for(k=0;k<m;k++)
{
for(j=1;j<m-k;j++)
b[k]*=10;
a[s]+=b[k];
}//将数组b的各位数字依次乘以10加起来赋给数组a
s++;
}
qsort(a,0,s-1);
for(i=0;i<s;i++)
printf("%lld\n",a[i]);
return 0;
}