非利克瑞尔数

简介: 非利克瑞尔数

【问题描述】

利克瑞尔数(Lychrel Number)指的是将该数各数位逆序翻转后形成的新数相加,并将该过程反复迭代后,结果永远无法是一个回文数的自然数。57就是一个非利克瑞尔数:57+75=132, 132+231=363,363是一个回文数。请编写程序,输入一个自然数(非利克瑞尔数),请计算其最终的回文数是多少及每次迭代过程。

注意:假设输入的整数和中间产生的整数都不超过int数据类型的表示范围。

【输入形式】

从标准输入读入一个正整数。

【输出形式】

在标准输出上输出迭代过程和最终的回文数。分行输出每次迭代过程:先输出迭代次数(从1开始计数),后跟英文冒号:,然后是两数相加等于某数的等式,其中的符号都是英文符号,没有空格。在最后一行输出最终得到的回文数。

若输入的整数本身就是回文数,则不输出任何迭代过程,直接输出该回文数。

【样例1输入】

109
【样例1输出】

1:109+901=1010
2:1010+101=1111
1111
【样例1说明】

输入的非利克瑞尔数为109,经过两次迭代可得到回文数:第一次迭代为109和其逆序数901相加得1010,第二次迭代为上次迭代得到的1010加上其逆序数101(注意:高位的0省略)得1111,1111就是最终得到的回文数。

【样例2输入】

909
【样例2输出】

909
【样例2说明】

输入的非利克瑞尔数为909,其本身为回文数,直接输出,没有迭代过程。

【评分标准】

该程序要求输出求非利克瑞尔数的回文数的迭代过程。

def sort_num(n):
    n1 = str(n)
    n2 = n1[::-1]
    n3 = int(n2)
    return n3


def pr(s):
    flag0 = True
    c = str(s)
    for m in range(int(len(c) / 2)):
        if c[m] != c[-m - 1]:
            flag0 = False
            break
    return flag0


figure = int(input())
start = pr(figure)
if not start:
    num = 0
    while 1:
        temp = sort_num(figure) + figure
        num = num + 1
        print(f'{num}:{figure}+{sort_num(figure)}={temp}')
        figure = temp
        if pr(temp):
            break
    print(figure)
else:
    print(figure)
相关文章
|
18天前
Armstrong 数
【10月更文挑战第24天】Armstrong 数。
32 7
|
24天前
找出最大的数
【10月更文挑战第18天】找出最大的数。
18 6
|
29天前
比较两个数
【10月更文挑战第13天】比较两个数
13 1
|
6月前
1002 写出这个数
1002 写出这个数
30 0
|
6月前
|
C++
第三大的数(C++)
第三大的数(C++)
45 0
|
人工智能 运维 物联网
数智光伏,走在希望的田野上
数智光伏,走在希望的田野上
|
C++
完美数(C++)
对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。给定一个 整数 n, 如果是完美数,返回 true;否则返回 false。
187 0
|
C++
201612-1 中间数
201612-1 中间数
71 0
201612-1 中间数
|
C++
201312-4 有趣的数
201312-4 有趣的数
66 0
201312-4 有趣的数