python123题目——特殊回文数

特殊回文数

类型:字符串

描述

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('无满足条件的数!')
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

m0_62488776

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值