朋友们,可不可以帮我看看错在哪里

对于一个数字n,我们必须采取一次操作: 交换其相邻的两位。
经过交换后得到的最大的数为zzj数。
聪明的你看到这里一定知道你要做什么了:, 

输入
 给定一个数字n。

数据范围: 10 <= n <= 1e8

输出
输出其zzj数。

样例输入 Copy
19260817
样例输出 Copy
91260817
提交讨论版
GPLv2 licensed by HUSTOJ 2021
#include
#include
using namespace std;
int length(int n){
int sum=0;
while(n)
{
n/=10;
sum++;
}
return sum;
}

int main()
{
int n;
cin>>n;
int s =n;
int list[length(n)];
for(int i =0;i<length(n);i++){
list[i]=s/pow(10,length(n)-i-1);
s-=list[i]*pow(10,length(n)-i-1);
}
int list2[length(n)];
for(int i=0;i<length(n);i++)
list2[i]=list[i];
int max=list[0];
int l=0,num,temp1,temp2;
while(l<length(n)-1){
for(int i=l;i<length(n);i++){
if(list[i+1]>list[i]){
max=list[i+1];
num=i+1;}
}
if(max==list[l])
l++;
else
temp1=list[num];
list2[l]=temp1;
temp2=list[l];
list2[num]=temp2;
break;

}
for(int i= 0;i <length(n);i++)
cout<<list2[i];
return 0;
}