Python代码,神奇的回文数问题

 
题目:回文数是一种数字。如: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[] 中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值