#include<stdio.h>
#include<string.h>
int main(void)
{
char x[10010],left[5010];
int xlen,i,j,k,h=0;
while(gets(x)!=NULL)
{
xlen=strlen(x);
//过滤前导0
for(i=0;i<xlen;i++)
if(x[i]!=‘0‘)
break;
//不含前导0的数组x
for(j=0;i<xlen;i++,j++)
x[j]=x[i];
x[j]=‘\0‘;
xlen=strlen(x);
//判断数组长度的奇偶性
k=0;
if(xlen%2==1)
k=1;
//从对称轴向两边开始判断大小
for(i=xlen/2-1,j=xlen/2+k;i>=0;i--,j++)
if(x[i]!=x[j])
break;
//左边大的情况
if(x[i]>x[j])
{
for(i=0;i<=xlen/2-1+k;i++)
printf("%c",x[i]);
for(i=i-1-k;i>=0;i--)
printf("%c",x[i]);
printf("\n");
}
//右边大的情况
else
{
for(j=0,i=xlen/2-1+k;i>=0;i--,j++)
left[j]=x[i]-‘0‘;
left[j]=‘\0‘;
//大数加法,加1
left[0]+=1;
for(i=0;i<=xlen/2-1+k;i++)
{
if(left[i]/10==0)
break;
left[i+1]+=left[i]/10;
left[i]%=10;
}
if(i==xlen/2+k)
{
left[++i]=‘\0‘;
h=1;
}
for(i=xlen/2-1+k+h;i>=0+h;i--)
printf("%d",left[i]);
for(i=0+k;i<xlen/2+k+h;i++)
printf("%d",left[i]);
printf("\n");
h=0;
}
}
return 0;
}
/**************************************
Problem id : SDUT OJ 2546
User name : 李俊
Result : Accepted
Take Memory : 272K
Take Time : 40MS
Submit Time : 2013-08-27 00:47:35
**************************************/原文:http://blog.csdn.net/li_jun_09_05/article/details/24186791