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