http://acm.hdu.edu.cn/showproblem.php?pid=4550
分析:就是前导可恶的0,然后利用字符串,大于序列第一个数的放右边,反之放左边(<=)
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int main()
{
string str,card;
char t;
int T,i,j,len;
cin>>T;
while(T--)
{
cin>>str;
len=str.size();
t='9';
for(i=len-1;i>=0;i--) //从后到前找到数字的第一位
{
if(str[i]!='0'&&str[i]<t)
{j=i;t=str[i];}
}
card=str[0];
for(i=1;i<len;i++)
{
if(i==j) card=str[i]+card;
else if(i<j)
{
if(str[i]<=card[0])
card=str[i]+card;
else
card+=str[i];
}
else
card+=str[i];
}
cout<<card<<endl;
}
return 0;
}