1190.大整数排序

Posted bernieloveslife

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("
");
    }
    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;
}

 





以上是关于1190.大整数排序的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

ZZNUOJ_用C语言编写程序实现1190:查询记录(结构体专题)(附完整源码)

以下代码片段的时间复杂度是多少?

poj1190 生日蛋糕(深搜+剪枝)

题解 bzoj1190: [HNOI2007]梦幻岛宝珠 (动态规划)

[tyvj1190]积木城堡