python-回文数(一)

题目描述
若一个数(首位不为 0 )从左到右读与从右到左读都是一样,这个数就叫做回文数,例如 12521 就是一个回文数。
给定一个正整数,把它的每一个位上的数字倒过来排列组成一个新数,然后与原数相加,如果是回文数则停止,如果不是,则重复这个操作,直到和为回文数为止。给定的数本身不为回文数。
例如: 87 则有:
STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884
编写一个程序,输入 M ,输出最少经过几步可以得到回文数。
如果在 8 步以内(含 8 步)不可能得到回文数,则输出 0 。
输入格式
第 1 行一个正整数 L  ,代表测试数据的组数。
接下来 L 行每行一个整数 M , M 本身不为回文数。
输出格式
输出 L 行,第 i 行对应输入数据的第 i+1 行,输出最少需要的步数;如果步数大于 8 ,则输出 0 。
样例输入输出
样例输入
3
12
87
89
样例输出
1
4
0
数据范围
对于 100% 的数据,保证 12≤M≤100 。
来源/分类(难度系数:三星

循环 递归


完整代码展示:
a=int(input())
b=[]
for i in range(a):
     c=int(input())
     b.append(c)

d=[]
for j in range(0,len(b)):
     e=list(str(b[j]))
     f=e[:]
     f.reverse()
     g=0
     while f!=e:
           sum1=""
           sum2=""
           for k in range(0,len(e)):
                sum1+=e[k]
                sum2+=f[k]
           sum3=int(sum1)+int(sum2)
           e=list(str(sum3))
           f=e[:]
           f.reverse()
           g+=1
      if  g<=8:
            d.append(g)
      else:
            d.append(0)
for l in range(0,len(d)):
     print(d[l])

a=int(input())
b=[]
for i in range(a):
    c=int(input())
    b.append(c)

d=[]
for j in range(0,len(b)):
    e=list(str(b[j]))
    f=e[:]
    f.reverse()
    g=0
    while f!=e:
        sum1=""
        sum2=""
        for k in range(0,len(e)):
            sum1+=e[k]
            sum2+=f[k]
        sum3=int(sum1)+int(sum2)
        e=list(str(sum3))
        f=e[:]
        f.reverse()
        g+=1
    if g<=8:
        d.append(g)
    else:
        d.append(0)
for l in range(0,len(d)):
    print(d[l])

代码解释:
a=int(input())  “,导入用户需要处理的数据数量a。
b=[]
 for i in range(a):
       c=int(input())
       b.append(c)  
”,建立一个空列表b,接着循环a次:导入用户需要处理的数据c,并将其添加进列表b中。
for j in range(0,len(b)):
       e=list(str(b[j]))
       f=e[:]
       f.reverse()           
 ”,遍历b中元素,将b[j]转换为字符串并储存在列表e中,再将e复制赋给f。将f反转。
g=0
 while f!=e:
        sum1=""
        sum2=""
        for k in range(0,len(e)):
              sum1+=e[k]
              sum2+=f[k]
        sum3=int(sum1)+int(sum2)
        e=list(str(sum3))
        f=e[:]
        f.reverse()
        g+=1                                   
”,令g为循环密码子,用于记录操作次数。当f不等于e时:建立两个空字符串sum1,sum2,让sum1,sum2分别连接e和f中元素,再将sum1,sum2转换为可计算数值。令sum1,sum2之和为sum3,再将sum3转换为字符串储存的列表赋给e,将e复制赋给f后再将f反转。每循环一次,就令g+1,直至f==e,跳出整个while循环。
if  g<=8:
         d.append(g)
  else:
         d.append(0)
”,每遍历一次,就判断g是否小于等于8,如果是:则将g添加进d中,否则将0添加进d中。
for l in range(0,len(d)):
       print(d[l])               
”,遍历d中元素并依次打印。


运行效果展示:


1,本体来源:本题源于赛氪OJ

2,难度系数:三星

3,算法涉及:循环,递归

                           (声明:以上内容均为原创) 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪云-微星

感谢大家的支持与鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值