题目描述 Description
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
输入描述 Input Description
第一行一个正整数n。
第二行n个正整数,空格隔开。
输出描述 Output Description
连接成的多位数。
样例输入 Sample Input
Sample 1:
3
13 312 343
Sample 2:
4
7 13 4 246
样例输出 Sample Output
Sample 1:
34331213
Sample 2:
7424613
数据范围及提示 Data Size & Hint
n≤20
6//这是之前用strcmp()出现的错误,自己写了一个比较函数就对了 321 32 407 135 13 217你的答案< 4073213221713513正确答案
> 4073232121713513
#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int coo(char str1[1000],char str2[1000])//自己写的比较函数
{
int i;
for(i=0;str1[i]!=0&&str2[i]!=0;i++)
{
if(str1[i]>str2[i])
return 1;
if(str1[i]<str2[i])
return -1;
}
if(str1[i]==0&&str2[i-1]>str1[0])
return -1;
if(str2[i]==0&&str1[i-1]>str2[0])
return 1;
}
char map[21][1000]={0};
int n;
void comp()
{
int i,j;
char str[1000]={0};
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(coo(map[i],map[j])<0)
{
strcpy(str,map[i]);
strcpy(map[i],map[j]);
strcpy(map[j],str);
}
}
}
}
int main()
{
scanf("%d ", &n);
for(int i=0;i<n;i++)
{
scanf("%s", map[i]);
}
comp();
long long sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;map[i][j]!=0;j++)
{
sum=sum*10+(map[i][j]-'0');
}
}
printf("%lld\n",sum);
return 0;
}