计算机考研复试真题 大整数排序

题目描述

对N个长度最长可达到1000的数进行排序。

输入描述:

输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。

输出描述:

可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
示例1

输入

3
11111111111111111111111111111
2222222222222222222222222222222222
33333333

输出

33333333
11111111111111111111111111111
2222222222222222222222222222222222




/*程序设计思路:将测试数据存入到字符串类型的向量中,按题目要求对字符串排序输出即可。*/
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;

static bool comp(string a,string b){  //按题意,重写排序规则
    if(a.length()<b.length())
        return true;
    if(a.length()>b.length())
        return false;
    if(a.length()==b.length())
        return a<b;
    return false;
}

int main(){
    int N=0;
    while(cin>>N){
        vector<string>vec(N,"");  //保存大整数,注意这种向量的初值。
        for(int i=0;i<N;++i){
            cin>>vec[i];
        }
        sort(vec.begin(),vec.end(),comp);
        for(int i=0;i<N;++i){
            cout<<vec[i]<<endl;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/parzulpan/p/9923148.html