首页 > 其他 > 详细

回文数(山东理工OJ)

时间:2014-04-21 05:55:12      阅读:598      评论:0      收藏:0      [点我收藏+]
题目描述
与回文串的定义一样,回文数是指一个数从第一位到最后一位读和从最后一位到第一位读是一样的。例如:121、22、2 是回文数而 312 不是。给定一个数,你的任务是找到大于这个数的第一个回文数。
输入
输入包含多组测试数据,每组数据只有一个数字 N, N 不超过 10000 位且不含前导零。
输出
对于每组测试数据,输出只有一行,为大于 N 的第一个回文数
示例输入
2 312
示例输出
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  
**************************************/

回文数(山东理工OJ),布布扣,bubuko.com

回文数(山东理工OJ)

原文:http://blog.csdn.net/li_jun_09_05/article/details/24186791

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!