比赛的时候没怎么读懂题目,其实就是找>=给出的数的回文数。设原先的月薪为a,回文月薪b,先让a的前半部分等于b,再对称着补全b的后半部分,然后判断这时候b比a大,直接输出,否则把b的前半部分加1,再对称着找出后半部分。输出即可。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#define MAXN 2010
using namespace std;
int main()
{
//freopen("in.txt",'r',stdin);
char original[MAXN],s[MAXN];
cin>>original;
int len=strlen(original);
int l=0,r=len-1;
for(int i=0; i<=(len-1)/2; i++,l++,r--)
{
s[r]=original[i];
s[l]=s[r];
}
s[len]='\0';
if(strcmp(s,original)>=0)
{
cout<<s<<endl;
return 0;
}
r=(len-1)/2;
s[r] ++;
int flag=0;
while(s[r]>'9'&&r>=0)
{
s[r]='0';
s[r-1]++;
r--;
}
if(s[0]>'9')
{
s[0]='0';
flag=1;
cout<<'1';
}
int j,i;
for( i=(len-1)/2,j=len/2; i>=0; i--,j++)
s[j]=s[i];
if(flag)
s[j++]='1';
s[j]='\0';
cout<<s<<endl;
return 0;
}