例如数字184392的最大的回文数是183381,数字34854的最大的回文数是34843
我们可以发现规律:对于位数是奇数的数字来说,例如28563的最大的回文数必然符合28*82的格式,对于位数是偶数的数字来说,例如184392,必然是18**81
#include<bits/stdc++.h>
using namespace std;
int main( )
{
string s,ans;
cin>>s;
if(s[0] == '0')
{
s.erase(0 , s.find_first_not_of('0'));
}
int n=s.length();
if(n==0){
cout<<0<<endl;
return 0;
}
if(n==1){
cout<<s<<endl;
}
else if(!(n%2)){
char c=(s[n/2-1]>s[n/2])?s[n/2]:s[n/2-1];
s[n/2-1]=s[n/2]=c;
string temp=s.substr(0,n/2-1);
reverse(temp.begin(),temp.end());
s.replace(s.begin()+n/2+1,s.end(),temp);
cout<<s<<endl;
}
else{
string temp=s.substr(0,n/2);
reverse(temp.begin(),temp.end());
ans=s.substr(0,n/2)+"*"+temp;
int i=n/2+1;
while(i<n&&s[i]==ans[i]){
i++;
}
if(i==n||s[i]>ans[i]){
ans[n/2]=s[n/2];
}
else{
ans[n/2]=s[n/2]-1;
}
cout<<ans;
}
return 0;
}