大整数排序

题目截图:

 

思路:

  将大整数输入到字符数组,先按字符串长度排序,若字符串长度相等,进行字符串比较。需自定义 cmp 函数,然后使用 C 内置的 qsort 函数。

 

代码如下:

 1 /*
 2     大整数排序 
 3 */
 4 
 5 #include <stdio.h>
 6 #include <string.h>
 7 #include <math.h>
 8 #include <stdlib.h>
 9 #include <time.h>
10 #include <stdbool.h>
11 
12 // 大整数结构体 
13 typedef struct {
14     char data[1001];    // 存储大整数 
15     int len;            // 大整数位数 
16 } bigint;
17 
18 bigint b[101];            // 存储输入数据 
19 
20 // 自定义 cmp 函数 
21 int cmp(const void* a, const void* b) {
22     bigint* c = (bigint*)a;
23     bigint* d = (bigint*)b;
24     if(c->len == d->len) {    // 若大整数位数相等
25         // 字符串比较 
26         return strcmp(c->data, d->data);
27     } else {                // 若大整数位数不相等 
28         return c->len - d->len;
29     }
30 }
31 
32 int main() {
33     int N;
34     while(scanf("%d", &N) != EOF) {
35         int i;
36         for(i=0; i<N; ++i) {        // 输入数据 
37             scanf("%s", b[i].data);
38             b[i].len = strlen(b[i].data);
39         }
40         // 按要求排序 
41         qsort(b, N, sizeof(b[0]), cmp);
42         for(i=0; i<N; ++i) {        // 按格式输出 
43             printf("%s", b[i].data);
44             if(i != N-1) {
45                 printf("\n"); 
46             }
47         } 
48     }
49 
50     return 0;
51 }

 

posted @ 2018-02-10 15:24  Just_for_Myself  阅读(633)  评论(0编辑  收藏  举报