九度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 }

 



posted @ 2017-03-03 15:12  琴影  阅读(546)  评论(0编辑  收藏  举报