题目:回文数是一种数字。如:8008, 这个数字正读是8008,倒读也是8008,正读倒读一样,所以这个数字就是回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。现在请你编程序验证猜想
输入格式:
每行一个正整数。
特别说明:输入的数据保证中间结果小于2^31
输出格式:
对应每个输入,输出两行,一行是变换的次数,一行是变换的过程。
输入样例:
27228
37649
输出样例:
在这里给出相应的输出。例如:
3
27228--->109500--->115401--->219912
2
37649--->132322--->355553
代码:
num = int(input())
z=0
x=0
N=0
_list = list(range(60)) #设置一个足够大的循环
_list[0]=num
for y in range(10):
N = len(str(num)) #将num的每个整位提取出来
my_list = list(range(N)) #用于储存每个num的整位
for i in range(0, N):
my_list[i] = num % (10 ** (i + 1)) // (10 ** i) #将num的每个数字储存进去
# 判断是否为回文数,如果不是,则进行逆序叠加
for j in range(N//2):
if my_list[j]==my_list[N-j-1]:
x=x+1
# 是回文数,输出并终止循环
if x==(N//2):
print(z)
print(_list[0],end="")
for o in range(1,z+1):
print("--->",end="")
print(_list[o],end="")
break
#不是回文数,逆序叠加一次
else:
sum=0
x=0 #将x重置
for m in range(0,N):
sum=sum+my_list[m]*(10**(N-m-1))
num=num+sum
z = z + 1
_list[z]=num #将叠加的结果输入到 _list[] 中