拼接数字
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
给定一个正整数数组,现在把数组所有数字都拼接成一个大数字,如何使得拼接后的数字最小。
Input:
输入包含多组测试数据,每组数据首先输入一个整数n(1<=n<=10000),接下来有n个整数a[i](1<=a[i]<=10^5);
Output:
对于每组数据,输出拼接后最小的数字。
Sample Input:
3 3 32 321
Sample Output:
321323
代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool cmp(int a,int b)//注意:a是数组中的后一个元素,b是数组中的前一个元素,return true代表交换这两个元素
{
string aa;//定义一个string
string bb;
while(a)
{
aa+=a%10;//string不能用类似数组x[0] = y这种方法赋值,只能用加法,如给一个string x加上一个元素y,则x+=y
a/=10;
}
while(b)
{
bb+=b%10;
b/=10;
}
reverse(aa.begin(),aa.end());//对string数组进行翻转。
reverse(bb.begin(),bb.end());
return (bb+aa) > (aa+bb);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int a[n];
for(int i = 0;i < n;i++)
scanf("%d",&a[i]);
sort(a,a+n,cmp);
for(int i = 0;i < n;i++)
printf("%d",a[i]);
printf("\n");
}
return 0;
}