P1609 最小回文数
链接: link.
题解:将前半部分对称到字符串后半部分,就可以得到回文串,如果该回文串小于给出的字符串,从中间加1即可,注意有9的情况,当中间是9时,中间变0同时前后加1。注意特判全为9的情况,需要加位。
#include<bits/stdc++.h>
using namespace std;
char s[1000],a[1000];
int main()
{
cin>>s;
int n=strlen(s)-1;
int i,flag=0;
//s[0]='0',a[0]='0';
for(i=0;i<=n-i;i++)a[i]=s[i],a[n-i]=s[i];
if(strcmp(a,s)>0)
{
}
else
{
for(i=n/2;i>=0;i--)
{
if(a[i]=='9')a[i]='0';
else
{
a[i]++;
break;
}
}
for(i=0;i<=n/2;i++)a[n-i]=a[i];
if(a[0]=='0')flag=1,a[n]='1';
}
if(flag==1)cout<<"1";
cout<<a;
}