新手写法
2026-08-12 02:13:00
发布于:江苏
2阅读
0回复
0点赞
写的可能有点麻烦,但是可以过
直接上代码!!!!!!!!!!!!
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
//下面这个函数是计算数字位数的
int solve(long long a){
int n=0;
while(a){
a/=10;
n++;
}
return n;
}
//cmp排序
bool cmp(long long a,long long b){
if(a==b)return a<b;//如果前后两个相等随便排就行,这里是直接返回a<b了
else{//否则
//下面这一串是不断比较每个数字的首个数字
while(true){
//如果首个数字不相同 就直接排
if(a/pow(10,solve(a)-1)!=b/pow(10,solve(b)-1)){//这里举个例子:
//5671 要取首个数字首先solve函数获取数字a的长度--是4,用pow幂函数计算10的3
//次方是1000 那5671/1000=5算出来首数字是5
return a/pow(10,solve(a))>b/pow(10,solve(b));
break;
}
//如果首数字不相等,就继续往后看
else{
//更新去掉首数字的新数字
a=a%int(pow(10,solve(a)));
b=b%int(pow(10,solve(b)));
}
}
}
}
int n;
long long a[30];
int main(){
//主函数不用讲了吧!!!!!
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
cout<<a[i];
}
return 0;
}
整体思路可能有点麻烦了,但这个可能是考虑全面一点的






这里空空如也



有帮助,赞一个