输入一个正整数M,M作为回文数的位数。要输出M位的回文数共有几个及这些回文数中包含几个99。(回文数是一个数的各位数字按相反的顺序重新排列后得出的数和原数一样)
回文数可以参考这个:https://blog.csdn.net/jerbo/article/details/130556635
自己判断位数、包含几个99
可以参考下:
m = int(input())
count = 0
count_99 = 0
for i in range(10**(m - 1), 10**m):
data_str = str(i)
data_str1 = data_str[::-1]
if data_str == data_str1:
count += 1
if str(i).find('99') != -1:
count_99 += 1
print(f"{m}位的回文数共有{count}个,这些回文数中包含{count_99}个99。")
运行结果:
# 需求:匹配出,8到20位的密码,可以是大小写英文字母、数字、下划线
#coding=utf-8
import re
ret = re.match("[a-zA-Z0-9_]{6}","12a3g45678")
print(ret.group())
ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66")
print(ret.group())
运行结果:
12a3g4
1ad12f23s34455ff66
给定位数的回文数的数量指的是在指定位数的数中,有多少个数是回文数。而回文数是指一个数的各位数字按相反的顺序重新排列后得到的数和原数相同。
以下是解决该问题的具体步骤及代码实现:
首先,我们需要明确回文数的定义。回文数是指一个数的各位数字按相反的顺序重新排列后得到的数和原数相同。既然是回文数,那么我们只需要检查一半的位数即可。
我们可以用一个循环来遍历指定位数范围内的数,然后判断每个数是否是回文数。
在判断一个数是否是回文数时,我们可以将该数转换为字符串,然后利用字符串的切片操作反转字符串。如果反转后的字符串和原字符串相同,则该数是回文数。
在每次判断完一个数是否是回文数时,我们可以统计回文数的数量,并同时判断该数是否包含99。
下面是代码实现:
def is_palindrome(n):
# 判断一个数是否是回文数
str_n = str(n)
reverse_str = str_n[::-1]
return str_n == reverse_str
def count_palindromes(num_digits):
# 统计给定位数范围内的回文数数量及包含99的数量
count = 0
count_99 = 0
start_num = 10 ** (num_digits - 1)
end_num = 10 ** num_digits
for num in range(start_num, end_num):
if is_palindrome(num):
count += 1
if '99' in str(num):
count_99 += 1
return count, count_99
# 调用函数计算给定位数范围内的回文数数量及包含99的数量
num_digits = 3 # 指定位数
palindrome_count, count_99 = count_palindromes(num_digits)
# 输出结果
print("给定位数范围内的回文数数量:", palindrome_count)
print("包含99的回文数数量:", count_99)
运行以上代码可以得到给定位数范围内的回文数数量和包含99的回文数数量。请根据需要修改num_digits
来指定位数范围。