17-非利克瑞尔数

  • 阅读: 211
  • 更新: 2022-06-11

难度:

1. 题目描述

2. 关键点

  • 数字逆序
  • 回文检测

3. 代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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. 运行示例

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

5. 进阶思考

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

=== 全文完 ===


欢迎加入QQ群:778391413

京公网安备 11011302003970号 京ICP备2022012301号-1