There are lots of number games forchildren. These games are pretty easy to play but not so easy tomake. We will discuss about an interesting game here. Each playerwill be given N positive integer. (S)He can make a biginteger by appending those integers after one another. Such as ifthere are 4 integers as 123, 124, 56, 90 then the followingintegers can be made – 1231245690, 1241235690, 5612312490,9012312456, 9056124123 etc. In fact 24 such integers can be made.But one thing is sure that 9056124123 is the largest possibleinteger which can be made.
You may think that it’s very easy tofind out the answer but will it be easy for a child who has justgot the idea of number?
Input
Each input starts with a positiveinteger N (≤ 50). In next lines there are N positiveintegers. Input is terminated by N = 0, which should not beprocessed.
Output
For each input set, you have to printthe largest possible integer which can be made by appending all theN integers.
Sample Input | Output for SampleInput |
4 | 9056124123 |
题意:
给定几个数字,把他们合起来写成一个数字。要求数字最大。
思路:
利用字符串比较数字大小, 将数字合起来可以直接用‘+’。
cmp函数可以直接将两个数加起来比较大小。。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
bool cmp(string a, string b)
{
string c;
if(a+b > b+a)
return 1;
else
return 0;
}
int main()
{
int N;
while(scanf("%d", &N) !=EOF && N)
{
string a[55];
string fin;
for(int i=0; i<N; i++)
{
cin>>a[i];
}
sort(a, a+N, cmp);
for(int i=0; i<N; i++)
{
fin += a[i];
}
cout<<fin<<endl;
// memset(a, '0', sizeof(char));
// memset(fin, '0', sizeof(char));
}
return 0;
}