• 回文数


    题目描述

    若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。

    例如:给定一个十进制数5656,将5656加6565(即把5656从右向左读),得到121121是一个回文数。

    又如:对于十进制数8787:

    STEP1:8787+7878 = 165165
    STEP2:165165+561561 = 726726
    STEP3:726726+627627 = 13531353
    STEP4:13531353+35313531 = 48844884

    在这里的一步是指进行了一次NN进制的加法,上例最少用了44步得到回文数48844884。

    写一个程序,给定一个NN(2 le N le 10,N=162N10,N=16)进制数MM(100100位之内),求最少经过几步可以得到回文数。如果在3030步以内(包含3030步)不可能得到回文数,则输出Impossible!

    输入格式

    两行,分别是NN,MM。

    输出格式

    STEP=ans

    输入输出样例

    输入 #1
    10
    87
    
    输出 #1
    STEP=4

    #include<cstdio>
    #include<cstring>
    char s[201];
    int a[401],top;
    inline bool judge()
    {
    int t=top/2;
    for (int i=0;i<=t;++i)
    if (a[i]!=a[top-i])
    return true;
    return false;
    }
    int main()
    {
    int n,step=0;
    scanf("%d%s",&n,s);
    top=strlen(s)-1;
    for (int i=0;i<=top;++i)
    if (s[i]>='0'&&s[i]<='9')
    a[top-i]=s[i]-'0';
    else
    a[top-i]=s[i]-55;
    while (judge())
    {
    if (step>30)
    return puts("Impossible!")&0;
    for (int i=0;i<=top;++i)
    if (top-i>=i)
    a[i]+=a[top-i];
    else
    a[i]=a[top-i];
    for (int i=0;i<=top;++i)
    if (a[i]>=n)
    a[i+1]++,a[i]-=n;
    if (a[top+1])
    top++;
    step++;
    }
    printf("STEP=%d ",step);
    return 0;
    }

    Try and fail,but don't fail to try; 失败是成功之母
  • 相关阅读:
    iOS重签名及问题总结
    安装class-dump
    UISearchController 很坑
    hashmap 之哈希冲突
    wait()与sleep()的区别
    docker之es+es-head+kibana+ik分词器安装
    MySQL很有用的命令
    分布式事务执行逻辑
    索引 创建原则
    合理使用存储引擎
  • 原文地址:https://www.cnblogs.com/Youio-bolg/p/11350518.html
Copyright © 2020-2023  润新知