题目描述
设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
输入描述:
第一行,一个正整数n。 第二行,n个正整数。
输出描述:
一个正整数,表示最大的整数
示例1
输入
3 13 312 343
输出
34331213
我们很容易想到可以先将数字用字符串形式表示,再比较大小,字符串大的放在前面。但是这样会忽略掉一种情况。例如:76 和 7,将其转化为字符串后76是大于7的,所以照之前哪种排法就是:767,但实际上776要比767更大。所以还要进行另一种比较:字符串a与字符串b拼接在一起(ab)和字符串b与字符串a拼接在一起(ba),相互比较,大的排前面。
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string num[25];
bool cmp(string a,string b){
if(a+b < b+a)
return 1;
return 0;
}
int main(){
int n;
cin >> n;
for(int i = 0;i < n;i++){
cin >> num[i];
}
sort(num,num+n,cmp);
for(int i = n-1;i >= 0;i--){
cout << num[i];
}
return 0;
}