【编程实现】
回文数是指一个像 14641 这样“对称”的数,即:将这个数的各位数字按相
反的顺序重新排列后,所得到的数和原来的数一样。请编程求不同位数数字
的回文数的个数。用户输入一个正整数 M(2<M<7),M 作为回文数的位
数。要求输出 M 位的回文数共有几个及这些回文数中有几个包含数字 99。
输入描述:输入一个正整数 M
输出描述:第一行输出回文数的个数;第二行输出 M 位的回文数中包含数字
99 的有几个。
【样例输入】
3
【样例输出】
90
1
解题思路:
1、明确在要求范围内统计回文数的个数,用了for循环解决(10**(M-1),10**M)
2、分解数字的方法得到数值中每个位数字。
3、如何判断回文数,分解出来的数字与原本数值是倒置,所以只需要重复组合一起在判断是否相等
4、判断回文数里有99个数,所以我这里采用列表去解决。
M=int(input())
c=0
d=0
for i in range(10**(M-1),10**M):
a=[]##1、建议列表 2、每次重复执行过后清空列表
b=0
m=i
while m>0:##数值从后面分解数字到数组中
a.append(m%10)
m//=10
for j in range(len(a)):##把分解好的数字重新组合起来,这里要注意分解是是从后往前的。
b=a[j]*(10**(len(a)-1-j))+b
if b==i:##判断是否回文数。
c+=1
for j in range(len(a)-1):
if a[j]*10+a[j+1]==99:##判断是否有99出现。
d+=1
break##题目只说有没有99这个出现,并没有统计说一个数值里有几个99,所以到找到一个时,就跳出~
print(c)
print(d)
假设本题去掉这些回文数中有几个包含数字 99,我采用while循环直接解决~
M=int(input())
b=0
for i in range(10**(M-1),10**M):
m=i
j = 1
N=0
while m>0:
n=m%10
m//=10
N=n*10**(M-j)+N##把分解好的数字重新组合起来,这里要注意分解是是从后往前的。
j+=1
if N==i:
b+=1
print(b)
这里比较难的是N变量的变化,要理解它,假设数值是121,那么首先把1拆出来1100 第二次拆2出来210,第三次拆就是1了,然后累加起来就得想要的数字了~这里比较难变量的变化
或者也可以直接采用原本程序中的列表方式解决也是ok的
M=int(input())
c=0
for i in range(10**(M-1),10**M):
a=[]##1、建议列表 2、每次重复执行过后清空列表
b=0
m=i
while m>0:##数值从后面分解数字到数组中
a.append(m%10)
m//=10
for j in range(len(a)):##把分解好的数字重新组合起来,这里要注意分解是是从后往前的。
b=a[j]*(10**(len(a)-1-j))+b
if b==i:##判断是否回文数。
c+=1
print(c)
print(d)