HLG 1644 比较多个大数的大小

链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1644

题目大意:

本题有多组测试数据,每组测试数据占n+1行。
第一行输入一个数字n (1 ≤ n ≤ 100),表示正整数的个数,接下来n行每行输入一个正整数,每个正整数不超过10^100。

每组测试数据输出占n行,按照从小到大的顺序输出;


分析:比较多个大数的大小,首先想到要用字符串来表示每一个数,然后根据每个数的长度排序,长度相等的则比较每一个数字字符的大小;


解题代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;

typedef struct Node_ {
    char Num[1005];
    int len;
}Node;

Node N[105];

int cmp(const void *a, const void *b) {
    Node *p1 = (Node *)a;
    Node *p2 = (Node *)b;
    if(p1->len != p2->len) {
        return p1->len - p2->len;
    }else {
        return strcmp(p1->Num, p2->Num);
    }
}

int main() {
    int n;
    while(~scanf("%d", &n)) {
        for(int i=0; i<n; i++) {
            scanf("%s", N[i].Num);
            N[i].len = strlen(N[i].Num);
        }
        qsort(N, n, sizeof(N[0]), cmp);
        for(int i=0; i<n; i++) {
            printf("%s\n", N[i].Num);
        }
    }
    return 0;
}

后续解法待续。。。。


你可能感兴趣的:(Algorithm,指针,结构体,快排,判断大数大小)