题目描述
对N个长度最长可达到1000的数进行排序。
输入描述:
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。
输出描述:
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
示例1
输入
3
11111111111111111111111111111
2222222222222222222222222222222222
33333333
输出
33333333
11111111111111111111111111111
2222222222222222222222222222222222
题目解析:首先超过机器的整数表示范围,所以我使用了字符串,长度长的字符串一定大。其次,长度相同字符串,可以直接比较。
代码:
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<iostream>
#include<iomanip>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
bool cmp(string str1,string str2){
if(str1.size() != str2.size()){
return str1.size() < str2.size();
}else{
return str1 < str2;
}
}
int main()
{
string number;
int n;
vector<string> vc;
while(cin >> n){
for(int i = 0; i < n ; i++){
cin >> number;
vc.push_back(number);
}
sort(vc.begin(),vc.end(),cmp);
for(int i = 0; i < vc.size(); i++){
cout << vc[i] << endl;
}
vc.clear();
}
return 0;
}