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,算法涉及:循环,递归
(声明:以上内容均为原创)