python - 如何获得给定数字的最接近、最小的回文数

标签 python math palindrome

我正在尝试修改答案以给出最接近的最低回文数。

我尝试修改这个答案:

     def lowest(n):
        s = str(n + 1)
        l = len(s)
        if s[:l//2][::-1] < s[(l+1)//2:]:
            head = str(int(s[:(l+1)//2]))
        else:
            head = s[:(l+1)//2]
        print int(head + head[:l//2][::-1])

但是对于数字 1000,它仍然返回 1001。我做错了什么?

最佳答案

如果您正在寻找前一个回文,您可以反转链接答案中的几个信号并添加边缘情况异常(exception)(对于 10^k+1,对于所有偶数 k >0)

def prev_palindrome(n):
    s = str(n - 1)
    l = len(s)
    if s[:l//2][::-1] > s[(l+1)//2:]:
        head = str(int(s[:(l+1)//2])-1)
    else:
        head = s[:(l+1)//2]
    if len(head) < l/2:
        return int(head + '9' + head[:l//2][::-1]) #edge case
    else:
        return int(head + head[:l//2][::-1])

如果您想要最近,您可以尝试:

nxt = next_palindrome(n)
prv = prev_palindrome(n)

if abs(prv-n) <= abs(nxt-n):
    print prv
else:
    print nxt

请注意,next_palindromeprev_palindrome 的返回率严格高于/低于n

关于python - 如何获得给定数字的最接近、最小的回文数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005170/

相关文章:

python - 如何在dict中搜索部分文本?

python - 如何处理通过将isbnlib.meta与 Pandas 一起应用返回的错误

C++检查回文时如何忽略上下的区别?

java - 为什么我的 if 语句不能正常工作?

list - 如何将函数应用于 haskell 中的列表?

python - 如何从相关模型中检查两个或多个参数?

python - 是否有从 Go 到 Python 的自动转换?

tsql - 检查闰年

c# - 有没有一个WPF库可以绘制数学表达式?

c# - XNA线段相交?