Skip to content

非利克瑞尔数

难度:⭐⭐

1. 题目描述

题目描述

  • 利克瑞尔数是将一个数字和该数字的各数位逆序排列后形成的新数相加,并将此过程反复迭代后,最终形成的一个非回文数的自然数。
  • 判断一个数经过最多5次的逆序相加之后是否为非利克瑞尔数。

2. 关键点

  • 数字逆序
  • 回文检测

3. 代码实现

点击显示代码
python
def reverse_num(x):
    """将数字进行逆序"""
    yy = 0
    while x:
        x, y = divmod(x, 10)
        yy *= 10
        yy += y
    return yy

def check(x):
    """检测是否是回文"""
    if x < 0:
        return False
    y = reverse_num(x)
    return x == y

def reverse_check(x):
    """检测是否是非利克瑞尔数
    只进行最多5次逆序
    """
    xx = x
    for i in range(5):
        y = reverse_num(x)
        if check(y):
            print(f'{xx}经过{i}次逆序后值为:{y}')
            return True
        if x != y:
            print(f'第{i+1}次逆序,原值为:{x};逆序值为:{y}')
        x += y
    return False


res = reverse_check(int(input('请输入一个数字:')))
print(res)

4. 运行示例

txt
请输入一个数字:69
第1次逆序,原值为:69;逆序值为:96
第2次逆序,原值为:165;逆序值为:561
第3次逆序,原值为:726;逆序值为:627
第4次逆序,原值为:1353;逆序值为:3531
69经过4次逆序后值为:4884
True

5. 进阶思考

  1. 输出1000以内只需要一次逆序的非利克瑞尔数