题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805449625288704
注意12312 123 这种,超出了第二个的长度,取余接着比,比到最后都一样,就比较长的的第一个和短的下一个。
还要注意首位有几个零的情况,全部要省去。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct numbers{
char num[10];
int len;
}m[10010];
bool cmp(numbers a, numbers b){
int i = 0;
if(a.len > b.len){
while(i < a.len){
if(a.num[i] != b.num[i % b.len])
return a.num[i] < b.num[i % b.len];
i++;
}
return a.num[0] <= b.num[i % b.len];
}
else{
while(i < b.len){
if(a.num[i % a.len] != b.num[i])
return a.num[i % a.len] < b.num[i];
i++;
}
return a.num[i % a.len] <= b.num[0];
}
}
int main(){
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%s", m[i].num);
m[i].len = strlen(m[i].num);
}
sort(m, m+n, cmp);
int flag = 1;
for(int i = 0; i < n; i++){
if(flag){
for(int j = 0; j < m[i].len; j++){
if(m[0].num[j] != '0'){
printf("%s", m[0].num+j);
flag = 0;
break;
}
}
}
else{
printf("%s", m[i].num);
flag = 0;
}
}
if(flag){
printf("0");
}
return 0;
}