九度OJ 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 <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\n", s[i]); } } return 0; } /************************************************************** Problem: 1190 User: liangrx06 Language: C Result: Accepted Time:10 ms Memory:948 kb ****************************************************************/
编程算法爱好者。