CSDN竞赛第61期--编程题第一题题解

题目描述:

回文数是一个非负整数,它的各位数字从高位到低位和从低位到高位的排列是相同的。 以下是一些回文数的例子:

0 ,1 ,33, 525, 7997, 37273

现在给到一个数,求离它最近的一个回文数(离与它的差的绝对值最小)。如果这个数本身就是回 文数,那么就输出它本身。

例:

输入:100  输出:99

输入:530  输出525

题目分析:

通过题目了解到回文数的意义,我们可以选择使用切片的方法完成。

程序首先通过切片的方法将数值进行逆序切片操作,将其反转,比较原始数值的字符串形式与其逆序字符串形式是否相等判断其是否为回文数。

例如,对于数值 12321,其字符串形式为 '12321',逆序字符串形式也为 '12321',因此满足条件,可以判断为回文数。

如数值不相等,程序将减小和增大数值,直到找到回文数位置。

python源代码:

def find_nearest_palindrome(number):
    # 判断一个数是否为回文数
    def is_palindrome(num):
        return str(num) == str(num)[::-1]

    smaller = number - 1
    larger = number + 1

    # 减小和增大数值,直到找到回文数
    while True:
        if is_palindrome(smaller):
            return smaller
        if is_palindrome(larger):
            return larger
        smaller -= 1
        larger += 1


number = int(input())
np= find_nearest_palindrome(number)
print(np)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值