题目描述:
对N个长度最长可达到1000的数进行排序。
输入:
输入第一行为一个整数N,(1<=N<=100)。 接下来的N行每行有一个数,数的长度范围为1<=len<=1000。 每个数都是一个正数,并且保证不包含前缀零。
输出:
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
样例输入:
4
123
1234
12345
2345
样例输出:
123
1234
2345
12345
实现代码:
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std
;
struct bign
{
int d
[1010];
int len
;
bign(){
memset(d
,0,sizeof(d
));
len
=0;
}
};
bign
change(char str
[]){
bign a
;
a
.len
=strlen(str
);
for(int i
=0;i
<a
.len
;i
++){
a
.d
[i
]=str
[a
.len
-i
-1]-'0';
}
return a
;
}
void print(bign a
){
for(int i
=a
.len
-1;i
>=0;i
--){
printf("%d",a
.d
[i
]);
}
printf("\n");
}
bool cmp(bign a
,bign b
){
if(a
.len
>b
.len
){
return 0;
}else if(a
.len
<b
.len
){
return 1;
}else{
int i
=a
.len
-1;
while(i
>=0){
if(a
.d
[i
]>b
.d
[i
]){
return 0;
}else if(a
.d
[i
]<b
.d
[i
]){
return 1;
}
i
--;
}
return 0;
}
}
int main(){
int n
;
char x
[1010];
bign a
[110];
while(scanf("%d",&n
)!=EOF){
for(int i
=0;i
<n
;i
++){
scanf("%s",&x
);
a
[i
]=change(x
);
}
sort(a
,a
+n
,cmp
);
for(int i
=0;i
<n
;i
++){
print(a
[i
]);
}
}
return 0;
}