求对称数

题目描述

如果给定一个对称数n,请你求出大于n的最小对称数(即这个数从左向右读和从右向左读是完全一样的)。

输入

第一行输入t(0<t<19999);

接下来的t行,每行输入一个n(0<n<10^9)。

输出

与输入相对应,每行输出一个大于n的最小对称数m

解题思路:输入的为对称数,分类讨论,针对个位、及全是9、不全为9,三种情况处理,用字符串处理。

算法步骤:1、输入的x为个位,如果不是9则,所求数为int(x+1),否所求数为11。

2、如果全为9且大于一位,如99改为101,999改为1001。

3、不全为9,还要分奇、偶。具体实现如下。

#include<stdio.h>
int main()
{
    char s[20];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",s);
        len=strlen(s);
        if(len==1)//个位数
        {
            if(s[0]=='9')
                printf("11\n");
            else
                printf("%d\n",s[0]-'0'+1);
        }
        else
        {
            //判断是否全部为9;999->1001
            for(i=0; s[i]; i++)
            {
                if(s[i]!='9')
                    break;
            }
            if(i==len)
            {
                for(i=0; i<=len; i++)
                {
                    if(i==0||i==len)
                        s[i]='1';
                    else
                        s[i]='0';
                }
                s[len+1]='\0';
            }
            else
            {
                //len为偶数,123321->124421;129921->130031;
                if(len%2==0)
                {
                    mid=len/2;
                    s[mid]+=1;
                    s[mid-1]+=1;
                    for(i=mid;i<len;i++)
                    {
                        if(s[i]==58)
                        {
                            s[i]='0';
                            s[i+1]+=1;
                            s[len-i-1]='0';
                            s[len-i-2]+=1;
                        }
                    }
                }
                else
                {
                    mid=len/2;
                    s[mid]+=1;
                    if(s[mid]==58)
                    {
                        s[mid]='0';
                        s[mid+1]+=1;
                        s[mid-1]+=1;
                        for(i=mid+1;i<len;i++)
                        {
                            if(s[i]==58)
                            {
                                s[i]='0';
                                s[i+1]+=1;
                                s[len-1-i]='0';
                                s[len-2-i]+=1;
                            }
                        }
                    }
                }
            }
            puts(s);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/King0237/article/details/107819587