题目链接:http://acm.zzuli.edu.cn/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,则输出一个0
cout<<endl;
}
return 0;
}
各位大佬,望指点指点,人生第一篇博客,轻喷。
求优化方法!!!!!!!
谢各位大佬关照本弱!!!!!!