1190.大整数排序

题目描述:

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

输入:

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

输出:

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

样例输入:
3
11111111111111111111111111111
2222222222222222222222222222222222
33333333
样例输出:
33333333
11111111111111111111111111111
2222222222222222222222222222222222

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int MAX = 1000;
struct BigInteger
{
    int digit[MAX];
    int size;
    void init() {
        for (int i = 0;i < MAX;i++) {
            digit[i] = 0;
        }
        size = 0;
    }
    void set(char str[]) {
        init();
        int L = strlen(str);
        for (int i = L - 1, j = 0, t = 0, c = 1;i >= 0;i--) {
            t += (str[i] - '0')*c;
            j++;
            c *= 10;
            if (j == 4 || i == 0) {
                digit[size++] = t;
                j = 0;t = 0;c = 1;
            }
        }
    }
    void output() {
        for (int i = size - 1;i >= 0;i--) {
            if (i != size - 1) {
                printf("%04d", digit[i]);
            }
            else {
                printf("%d", digit[i]);
            }
        }
        printf("\n");
    }
    bool operator < (const BigInteger A) const
    {
        if (size != A.size)
        {
            return size < A.size;
        }
        else
        {
            for (int i = size - 1; i >= 0; i--)
            {
                if (digit[i] != A.digit[i])
                {
                    return digit[i] < A.digit[i];
                }
            }
        }
    }
 
 
}E[100];
 
char str[1000];
int main()
{
    int n;
    while (scanf("%d", &n) != EOF) {
        for(int i =0;i<n;i++) {
            scanf("%s", str);
            E[i].set(str);
        }
        sort(E, E + n);
        for (int i = 0;i<n;i++) {
            E[i].output();
        }
    }
    return 0;
}

 

posted @ 2018-10-01 18:16  bernieloveslife  阅读(161)  评论(0编辑  收藏  举报