特殊回文数
类型:字符串
描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的,我们称这样的数为回文数。
输入一个正整数n, 编程求所有这样的五位和六位十进制回文数,满足各位数字之和等于n(1<=n<=54)。 按从小到大的顺序输出满足条件的整数。
如果输入的数不在指定的范围,输出“输入错误,请重新输入!”
如果没有各位之和与输入的数相等的五位和六位回文数,输出“无满足条件的数!”
输入格式
输入一个正整数
输出格式
示例1
输入:54
输出:999999
示例2
输入:2
输出:
10001
100001
参考代码
# 方法一
def reverse_num(n):
"""接收一个整数为参数,返回这个整数的逆序整数。"""
return int(str(n)[::-1])
def accumulate(n):
"""接收一个整数为参数,计算并返回这个整数的各位数之和。"""
return sum([int(x) for x in str(n)]) # 将整数转为字符串,将其中每个数字映射为整型,对序列求和
# 5位和6位数10000 到 1000000 之间,遍历这个区间的数,可找到满足各位数之和为 n 的回文数
num = int(input()) # 输入一个正整数
flag = 0 # 定义一个变量用于做是否找到满足条件的数的标记,0表示未找到
if num > 54 or num < 1: # 判定输入是否符合题目要求
print('输入错误,请重新输入!')
else:
for i in range(10000, 1000000): # 遍历所有5位和6位数
if i == reverse_num(i) and accumulate(i) == num:
print(i)
flag = 1 # 至少找到一个符合题意的回文数
if flag == 0: # 若遍历结束,flag值仍为0表示无满足条件的数
print('无满足条件的数!')
#
# # 方法二
# def palindrome(n):
# """接收一个正整数为参数,遍历寻找5位和6位数中各位上数字之和等于n的回文数,输出满足条件的数字,
# 若找不到这样的数时输出'无满足条件的数!'
# """
# sign = 0
# for j in range(10000, 1000000):
# number = list(str(j))
# # 使用reversed把列表进行反向迭代, eval求值连接后的字符串
# if number == list(reversed(number)) and eval('+'.join(number)) == n:
# print(j)
# sign = 1 # 至少找到一个符合题意的回文数
# if sign == 0: # 若遍历结束,flag值仍为0表示无满足条件的数
# print('无满足条件的数!')
#
#
# num = int(input()) # 输入一个正整数
# if num > 54 or num < 1: # 判定输入是否符合题目要求
# print('输入错误,请重新输入!')
# else:
# palindrome(num)
# 方法三
# def reverse_num(n):
# """接收一个整数为参数,返回这个整数的逆序整数。"""
# return int(str(n)[::-1])
# def accumulate(n):
# """接收一个整数为参数,计算并返回这个整数的各位数之和。"""
# return sum([int(x) for x in str(n)]) # 将整数转为字符串,将其中每个数字映射为整型,对序列求和
# # 5位和6位数10000 到 1000000 之间,遍历这个区间的数,可找到满足各位数之和为 n 的回文数
# num = int(input()) # 输入一个正整数
# if num > 54 or num < 1: # 判定输入是否符合题目要求
# print('输入错误,请重新输入!')
# else: # 满足条件的数在列表中输出,若列表长度为0,则无满足要求的数
# result = [print(i) for i in range(10000, 1000000) if i == reverse_num(i) and accumulate(i) == num] # 遍历所有5位和6位数
# if len(result ) == 0: # 若遍历结束,列表长度为0
# print('无满足条件的数!')