本题就是注意一下 怎么把前缀0 都消去,以及ans为“000…000”怎么办
tips: 怎么用cmp来判断是否为最小的字符串和?
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp1(string a,string b){
return a+b<b+a;
}
int n,num;
string ans;
string str[10010];
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
cin>>str[i]; //直接以字符串的形式读入,比如 028,033 存进去还是 028 033 这前面的0对答案没影响,因为题干只要求首位不为0
}
sort(str,str+n,cmp1);
for(int i=0;i<n;i++){
ans+=str[i];
}
while(ans.length()!=0&&ans[0]=='0')
ans.erase(ans.begin()); //去掉所有前缀0
if(ans.length()==0)
cout<<0;
cout<<ans; //写成 cout<<ans.length()==0?0:ans; 会报 运行时出错 得 28 分
return 0;
}