#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> typedef struct in_num { char num[1001]; int length; }in; int cmp(const void* a,const void* b) { in c = *(in*) a; in d = *(in*) b; if(c.length == d.length) { for(int i=0;i<c.length;i++) { if(c.num[i] != d.num[i]) { return c.num[i] - d.num[i]; } } return c.num - d.num; } else { return c.length - d.length; //长度升序 } } int main() { //大整数用字符串存储,先比长度再按位置比较 int n; while(scanf("%d",&n) != EOF) { in number[n]; for(int i=0;i<n;i++) { scanf("%s",number[i].num); number[i].length = strlen(number[i].num); } qsort(number,n,sizeof(in),cmp); for(int i=0;i<n;i++) { printf("%s\n",number[i].num); } } return 0; }