链接: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; }
后续解法待续。。。。