九度oj 题目1190:大整数排序
题目1190:大整数排序
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:4142
解决:1867
- 题目描述:
-
对N个长度最长可达到1000的数进行排序。
- 输入:
-
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。
- 输出:
-
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
- 样例输入:
-
3 11111111111111111111111111111 2222222222222222222222222222222222 33333333
- 样例输出:
-
33333333 11111111111111111111111111111 2222222222222222222222222222222222
分析:将每个大整数看成字符串,如果长度不同,则按长度从小到大排序,否则按字典序排序。(直接按字典序排序不行,如例子,
回先输出1开头的。)1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #include <vector> 5 using namespace std; 6 bool cmp(string a, string b){ 7 int len_a = a.length(); 8 int len_b = b.length(); 9 if(len_a != len_b) 10 return len_a < len_b; 11 else 12 return a < b; 13 } 14 15 int main(){ 16 int n; 17 string s; 18 vector<string> v; 19 while(cin >> n){ 20 v.clear(); 21 for(int i = 0; i < n; i++){ 22 cin >> s; 23 v.push_back(s); 24 } 25 sort(v.begin(), v.end(), cmp); 26 for(int i = 0; i < n; i++){ 27 cout << v[i] << endl; 28 } 29 } 30 //system("pause"); 31 return 0; 32 }
越努力,越幸运