题目链接:http://acm./problem.php?id=2218
这题两个坑点,第一多位数数目较多,这个地方要注意排序的方法(这里还可以进行优化,但本弱不会,望大神指点指点),第二注意前导零。
解题方法就是两个字符串拼接经行比较大小,例如样例输入中的13和312,组合起来31213比13312大,所以把312放前面。这里用到了c++的string的知识,可以两个直接相加比较。这个比较简单。
#include<stdio.h>#include<string.h>#include<iostream> #include<algorithm>using namespace std;int main(){int t,n;string s[1020],str1;scanf("%d",&t);while(t--){long long count;string str2="";//字符串清空 scanf("%d",&n);for(int i=0;i<n;i++)cin>>s[i];for(int i=0;i<n;i++)//对字符串大小经行排序 for(int j=i+1;j<n;j++){if(s[i]+s[j]<s[j]+s[i]){str1=s[i];s[i]=s[j];s[j]=str1;}}int flag=0;for(int i=0;i<n;i++){count=atol(s[i].c_str());//字符转数字 if(count==0&&flag==0)continue;//除去前导零 if(count!=0) {printf("%lld",count);flag=1; }}if(flag==0) printf("0");//若前面全是0,则输出一个0cout<<endl; }return 0;}
各位大佬,望指点指点,人生第一篇博客,轻喷。
求优化方法!!!!!!!
谢各位大佬关照本弱!!!!!!
轻院2218: 小明的数字游戏( 给你n个数字 把这n个数字拼接起来 最大能拼出的数字是多少?)