#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