迴文數(山東理工OJ)
阿新 • • 發佈:2019-02-15
3 313
#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 **************************************/