如果直接暴力枚举则很有可能会超时,则按位处理即可,注意:当n全为9时或为一位数时单独处理
#include<bits/stdc++.h>
using namespace std;
int n;
char s[15];
bool flag;
int main()
{
scanf("%d",&n);
while(n--)
{
flag=true;
scanf("%s",&s);
int len=strlen(s);
if(len==1)//为一位数时
{
if(s[0]=='9')
printf("11\n");
else
printf("%d\n",s[0]-48+1);
}
else
{
for(int i=0;i<len;i++)//当所有位为9时
{
if(s[i]!='9')
{
flag=false;
break;
}
}
if(flag)//全为9时直接打印
{
for(int i=0;i<len+1;i++)
{
if(i==0||i==len)
printf("1");
else
printf("0");
}
printf("\n");
}
else
{
if(len%2)//为奇数时处理
{
int w=len/2;
s[w]+=1;
if(s[w]==58)
{ s[w]='0';
s[w-1]+=1;
s[w+1]+=1;
for(int i=w+1;i<=len-1;i++)//检查是否有进位 19991->20002
{
if(s[i]==58)
{
s[i]='0';
s[i+1]+=1;
}
if(s[len-1-i]==58)
{
s[len-i-1]='0';
s[len-i-2]+=1;
}
}
}
}
else//偶数情况
{
int w=len/2;
s[w]+=1;
s[w-1]+=1;
for(int i=w;i<=len-1;i++)//同检查进位 1991->2002
{
if(s[i]==58)
{
s[i+1]+=1;
s[i]='0';
}
if(s[len-1-i]==58)
{
s[len-2-i]+=1;
s[len-i-1]='0';
}
}
}
printf("%s\n",s);
}
}
}
return 0;
}