//思路:最近在练习大整数,所以用大整数,可以直接用string类的比较大小的方法,长度相同的比较每一位,不同的则长的大 //string 用大整数储存法,然后定义结构体,重载<符号, //用sort进行排序 #include<iostream> #include<string> #include<algorithm> using namespace std; struct M { int dig[1000]; int size;//保存大整数的位数 void init()//先初始化 { size=0; for(int i=0;i<1000;i++) dig[i]=0; } void set(string &s)//这里我用的是1位整数按高位到地位顺序保存到一个数组单位中,如果4位一保存 { //在比较size相同的时候会出现复杂情况,故此回避,牺牲空间 init(); int len=s.length(); for(int j=0;j<len;j++) { dig[j]=s[j]-'0'; size++; } } bool operator<(M&a) { if(size!=a.size)//位数长的数更大 return size<a.size; else for(int i=0;i<size;i++)//位数相同,则开始遍历到出现有一位数不同时,判断大小 if(dig[i]!=a.dig[i]) return dig[i]<a.dig[i]; } }buf[100]; string s[100]; int main() { int n; while(cin>>n) { for(int i=0;i<n;i++) { cin>>s[i]; buf[i].set(s[i]); } sort(buf,buf+n); for(int i=0;i<n;i++) { for(int j=0;j<buf[i].size;j++) cout<<buf[i].dig[j]; cout<<endl; } } return 0; }