1. 程式人生 > >迴文數(山東理工OJ)

迴文數(山東理工OJ)

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  
**************************************/