整数拼数 C语言版
题意是给出n个整数(整数是小于1000的)。求这些整数拼出来的最大或最小整数。
思路:类似与排序,只是排序的比较规则是若ab<ba 则a<b。
1 //此文件实现将输入的n个数(数小于1000)组合成一个大数,比且这个大数是组合中最小的一个
2
3 #include<stdio.h>
4 #include<stdlib.h>
5 #include<string.h>
6
7
8 static int num_sort(const void* a, const void* b)
9 {
10 const char * s1 = *((const char**)a);
11 const char * s2 = *((const char**)b);
12 int len1 = strlen(s1);
13 int len2 = strlen(s2);
14 char* cs1 = (char*)malloc((len1+len2+1)*sizeof(char));
15 char* cs2 = (char*)malloc((len1+len2+1)*sizeof(char));
16 strcpy(cs1,s1);
17 strcpy(cs1+len1,s2);
18 strcpy(cs2,s2);
19 strcpy(cs2+len2,s1);
20 int rt = strcmp(cs1,cs2);
21 free(cs1),free(cs2);
22 }
23
24
25 int main()
26 {
27 int n;
28 while(1)
29 {
30 scanf("%d",&n);
31 if(n<=0)
32 break;
33 char** nums = (char**)malloc(n*sizeof(char*));
34
35 int i;
36
37 for(i=0;i<n;i++)
38 {
39
40 nums[i]=(char*)malloc(4*sizeof(char));
41 scanf("%s",nums[i]);
42 }
43 qsort(nums,n,4,num_sort);
44
45 for(i=0;i<n;i++)
46 {
47 printf("%s",nums[i]);
48 free(nums[i]);
49 }
50 printf("\n");
51 free(nums);
52 }
53 return 0;
54 }
55
感觉C实现比C++不好的地方在于比较函数简洁度,这是由于string的操作都已经实现好了,还是站在巨人的肩膀上好啊。
posted on 2010-10-26 11:10 Weifeng Wang 阅读(731) 评论(0) 编辑 收藏 举报