欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

最大整数(Noip1998连接多位数)

发布时间:2025/7/14 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 最大整数(Noip1998连接多位数) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

最大整数(Noip1998连接多位数)
【问题描述】
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
【输入格式】
n
n个数
【输出格式】
联接成的多位数
【输入样例】maxnum.in
3
13 312 343
【输出样例】maxnum.out
34331213

分析:
这个题目很自然地想到把n个数按照字符串排序之后输出即可。
但是对两个串A和B,假如按照正常的strcmp(A,B)的结果来判断A和B的大小关系
从而作为排序依据的话,很容易就可以举例说明不正确:
例如A=“13”,B=“132”,strcmp(A,B)发现A<B,但是AB>BA。
所以,这里应该判断AB和BA的大小关系来判断A和B的大小关系:
若是AB>BA则A>B,若是AB<BA则A<B,否则A==B。
按照这个比较规则对所有字符串排序并输出即可。

 

1 #include <stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int cmp(const void * a,const void *b) 5 { 6 char ab[105],ba[105]; 7 strcpy(ab,(char *)a);strcat(ab,(char *)b); 8 strcpy(ba,(char *)b);strcat(ba,(char *)a); 9 return strcmp(ba,ab); 10 } 11 int main() 12 { 13 int n,i,temp; 14 char a[23][50]; 15 freopen("maxnum.in","r",stdin); 16 freopen("maxnum.out","w",stdout); 17 scanf("%d",&n); 18 for(i=0;i<n;i++) 19 scanf("%s",a[i]); 20 /*for(i=0;i<n;i++) 21 printf("%s\n",a[i]);*/ 22 qsort(a,n,sizeof(a[0]),cmp); 23 for(i=0;i<n;i++) 24 printf("%s",a[i]); 25 return 0; 26 }

 

转载于:https://www.cnblogs.com/huashanqingzhu/p/6728717.html

总结

以上是生活随笔为你收集整理的最大整数(Noip1998连接多位数)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。