华科机考:大整数排序
时间限制:1秒 空间限制:32768K
题目描述
对N个长度最长可达到1000的数进行排序。
输入描述: 输入第一行为一个整数N,(1<=N<=100)。 接下来的N行每行有一个数,数的长度范围为1<=len<=1000。 每个数都是一个正数,并且保证不包含前缀零。
输出描述: 可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
输入例子: 3
11111111111111111111111111111
2222222222222222222222222222222222
33333333
输出例子: 33333333
11111111111111111111111111111
2222222222222222222222222222222222
思路:写个cmp就行了,先按照长度来比较,如果一样的话再按照字典序来排
代码:
#include <algorithm> #include <iostream> #include <vector> using namespace std; int cmp(string str1,string str2){ if(str1.size()!=str2.size()) return str1.size()<str2.size(); else return str1<str2; } int main(){ int n,tmp; string str; vector<string> a; while(cin>>n){ tmp=n; while(tmp--){ cin>>str; a.push_back(str); } sort(a.begin(),a.end(),cmp); for(int i=0;i<n;i++) cout<<a[i]<<endl; a.clear(); } return 0; }