我好像发现了排序的新方法......
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int k;
int L(int x){
int cnt=0;
while(x){
x /= 10;
cnt++;
}
return cnt;
}
int G2(int p){
int ans=0;
while(p--){
ans = ans*10+1;
}
return ans;
}
int N(int x, int i, int l){
return x/pow(10, l-i-1)%10;
}
int Funtion1(int n){
int l=L(n);
for(int i=0;i<l;i++){
bool f=1;
for(int j=1;j<l;j++){
int a=N(n, j-1, l), b=N(n, j, l);
if(a<b){
n += (b-a)*9*pow(l-j-1);
f = 0;
}
}
if(f){
break;
}
}
return n;
}
int Funtion2(int n){
int l=L(n);
for(int i=0;i<l;i++){
int m=-1;
int idx=0, j;
for(j=i+1;j<l;j++){
int a=N(n, j, l);
if(a>m){
m = a;
idx = j;
}
}
if(m>N(n, i, l)) n += abs(N(n, i, l)-N(n, idx, l))*9*G2(idx-i)*pow(l-idx-1);
}
return n;
}
int main(){
cin >> k;
cout << Funtion1(k) << "\n" << Funtion2(k);
return 0;
}