本来想写一个比较函数对数字进行比较,然后直接Sort一下就可以了,但是WA了
后来看到了题解,没想到用字符串这么方便,思维还算是要开阔一点,还是要转换的快一点呀
Not ACCode:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 55;
int num[maxn];
bool cmp(int a, int b)
{
int A[100], B[100];
int lena = 0, lenb = 0;
while(a > 10){
A[lena++] = a % 10;
a = a/10;
}
A[lena++] = a;
while(b > 10){
B[lenb++] = b % 10;
b = b/10;
}
B[lenb++] = b;
for(int i = 1; i <= min(lena, lenb); i++){
if(A[lena-i] > B[lenb-i]) return true;
else if(A[lena-i] < B[lenb-i]) return false;
}
if(lena < lenb) return true;
else return false;
}
int main()
{
int n;
while(scanf("%d", &n) && n){
for(int i = 0; i < n; i++)
scanf("%d", &num[i]);
sort(num, num+n, cmp);
for(int i = 0; i < n; i++)
printf("%d", num[i]);
cout << endl;
}
return 0;
}
ACCode:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn = 55;
string words[maxn];
bool cmp(string s1, string s2)
{
return s1+s2 > s2+s1;
}
int main()
{
int N;
while(scanf("%d", &N) && N){
for(int i = 0; i < N; i++)
cin >> words[i];
sort(words, words+N, cmp);
for(int i = 0; i < N; i++)
cout << words[i];
cout << endl;
}
return 0;
}