题意:找出比给定数大一点点的回文数;
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
int a[100005],b[100005];
char ch[100005];
bool judge(int len)
{
for(int i=0;i<len;i++)
if(a[i]!=9) return false;
return true;
}
void solve()
{
int len = strlen(ch);
for(int i=0;i<len;i++)
a[i] = ch[i]-'0';
int tmp = -1;
for(int i=0;i<len;i++)
if(a[i])
{
tmp = i;
break;
}
if(tmp==-1)
{
a[0] = 0;len = 1;
}else
{
for(int i=0;i+tmp<len;i++)
a[i] = a[i+tmp];
len-=tmp;
}
if(judge(len))
{
for(int i=0;i<=len;i++)
if(i==0||i==len)
printf("1");
else
printf("0");printf("\n");
return ;
}
int p=0;
int k = 0;
int mid = len>>1;
for(int i=len-1;i>=mid;i--)
{
int c = len - i - 1;
if(a[i]!=a[c]) k = 1;
if(a[c]>=a[i]+p)
{
a[i] = a[c];p=0;
}else
{
p = 1;
a[i] = a[c];
}
}
if(k==0||p)
{
if(len&1)
{
for(int i=(len>>1);i>=0;i--)
if(a[i]==9)
{
a[i] = a[len-i-1] = 0;
}else
{
a[i]=a[len-i-1] = a[i]+1;
break;
}
}
else
{
for(int i=(len>>1)-1;i>=0;i--)
if(a[i]==9)
{
a[i] = a[len-i-1] = 0;
}else
{
a[i]=a[len-i-1] = a[i]+1;
break;
}
}
}
for(int i=0;i<len;i++)
{
printf("%d",a[i]);
}printf("\n");
}
int main()
{
freopen("in.txt","r",stdin);
int cas,T=1;
scanf("%d",&cas);
while(cas--)
{
scanf("%s",ch);
printf("Case %d: ",T++);
solve();
}
return 0;
}