题解 | #[NOIP1999]回文数#

[NOIP1999]回文数

https://www.nowcoder.com/practice/a432eb24b3534c27bdd1377869886ebb

#include <cstring>
#include <iostream>
using namespace std;

int main() {
    int count=0,min=0;
    char a[130]={'\0'},b[130]={'\0'};
    int N;
    cin>>N;
    cin.get();
    cin.getline(a,130,'\n');
    int len=strlen(a);
    int flaghui=0,flagstep=0;//
    //处理字符串使对应数据连续
    for(int i=0;i<len;i++)
    {
        if(a[i]>='A'&&a[i]<='F')
            a[i]=a[i]-65+48+10;
    }

    for(int c=0;c<30;c++)
    {//判断是否为回文
        len=strlen(a);
        for(int i=0;i<len/2;i++)
        {
            if(a[i]!=a[len-1-i])
            {
                flaghui=0;
                break;
            }
            else {
                flaghui=1;
            }
        }
        if(flaghui==1)
        {
            flagstep=1;
            cout<<"STEP="<<c;
            break;
        }

        //若不回文加法
        strcpy(b,a);
        for(int i=0;i<len;i++)
        {
            int tmp=a[i]+b[len-1-i]-48-48;
            if(tmp>=N)
            {
                a[i]=tmp-N+48;
                if(i+1>=len)
                    a[i+1]='1';
                else
                    a[i+1]=a[i+1]+1;

            }
            else {
                a[i]=tmp+48;
            }
        }




    }
    if(flagstep==0)//30步仍未回文
        cout<<"Impossible!";




}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务