zoukankan      html  css  js  c++  java
  • 回文数

    题目描述

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

    例如:给定一个十进制数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; 失败是成功之母
  • 相关阅读:
    c# cover他和parse区别
    函数指针的两种调用形式(转)
    -1的 补码
    xp 关 beep提示音
    case 内定义的变量 “crosses initialization” 交叉初始化错误
    WEBSTORM 打开多个项目的方法
    linux--用户管理--useradd
    委托
    C#多态学习总结
    SQL实现group by 分组后组内排序
  • 原文地址:https://www.cnblogs.com/Youio-bolg/p/11350518.html
Copyright © 2011-2022 走看看