洛谷 P1015 [NOIP1999 普及组] 回文数【python】

题目链接
浅浅的记录我的洛谷python刷题情况



问题重述

题目描述

在这里插入图片描述

输入格式

在这里插入图片描述

输出格式

在这里插入图片描述

输入输出样例

#样例1
输入:
10
87
输出:
STEP=4

大概思路

这题很简单,就是有一个很大的坑,就是读入的数据会有一个回车,如果没有处理掉的话就会RE,这个坑让我花了将近2个小时,贼难受

首先我们就是要知道怎么判断回文数,判断回文数的方法有很多,python更简单,利用字符串即可

再就是进制的相加,十进制的相加我们熟悉吧,任意进制相加的原理都是一样的,所以我们就依葫芦画瓢就行了,我们可以在纸上随便编个8进制或者16进制或则2进制的任意两个数的加法,然后自己试着加一下就能懂了,接下来直接上代码


完整AC代码

def is_huiwen(number):
    return number == number[::-1]


def add(number, n):
    if n == 10:
        return str(int(number) + int(number[::-1]))
    c = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', "A", "B", "C", "D", "E", "F"]
    e = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    d = dict(zip(c, e))
    a = number
    tag = 0             # 进位
    s = ""
    for i in range(len(a)):
        # 对应的位相加
        if tag:
            t = d[a[i]] + d[a[len(a) - i - 1]] + tag
        else:
            t = d[a[i]] + d[a[len(a) - i - 1]]
        if t >= n:
            tag = t // n
            s = c[t % n] + s
        else:
            s = c[t] + s
            tag = 0
    if tag:
        s = c[tag] + s
    return s

def main():
    N = int(input())
    M = input().strip()
    step = 0
    while step <= 30:
        if is_huiwen(M):
            print(f"STEP={step}")
            break
        else:
            M = add(M, N)
        step += 1
    else:
        print("Impossible!")

if __name__ == "__main__":
    main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值