• 九度OJ 1190:大整数排序 (大数运算、排序)


    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:3219

    解决:1467

    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    3
    11111111111111111111111111111
    2222222222222222222222222222222222
    33333333
    样例输出:
    33333333
    11111111111111111111111111111
    2222222222222222222222222222222222
    来源:
    2006年华中科技大学计算机研究生机试真题

    思路:

    大整数比较。除了本代码,还有一种思路是前缀补零然后按字典序排序。


    代码:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
    #define N 100
    #define M 1000
     
    int cmp(const void *a, const void *b)
    {
        char *c = (char *)a;
        char *d = (char *)b;
        if (strlen(c) != strlen(d))
            return strlen(c) - strlen(d);
        else
        {
            for (int i=0; i<strlen(c); i++)
            {
                if (c[i] != d[i])
                    return c[i] - d[i];
            }
            return 0;
        }
    }
     
    int main(void)
    {
        int n, i;
        char s[N][M+1];
     
        while (scanf("%d", &n) != EOF)
        {
            for (i=0; i<n; i++)
                scanf("%s", s[i]);
            qsort(s, n, sizeof(s[0]), cmp);
            for (i=0; i<n; i++)
            {
                printf("%s
    ", s[i]);
            }
        }
     
        return 0;
    }
    /**************************************************************
        Problem: 1190
        User: liangrx06
        Language: C
        Result: Accepted
        Time:10 ms
        Memory:948 kb
    ****************************************************************/
    


    编程算法爱好者。
  • 相关阅读:
    poj2104 Kth-Number
    bzoj2120 数颜色
    hdu5145 NPY and girls
    bzoj2734 集合选数
    bzoj3732 NetWork
    bzoj2152 聪聪可可
    hdu2036(多边形面积)
    超大次幂思路
    hdu 2030 统计汉字个数
    Hibernate 配置文件与映射文件 总结
  • 原文地址:https://www.cnblogs.com/liangrx06/p/5083837.html
Copyright © 2020-2023  润新知