提问者:小点点

生成回文的函数


我似乎无法正确解决以下问题。我必须编写一个函数,将正整数n作为输入,并检查它是否是回文(向前和向后相同的数字)。如果是,我必须返回这个数字。如果不是,我必须计算原始数字与反转数字的总和。重复此步骤,直到结果是回文。这是我到目前为止的代码:

x = input("Enter a positive integer: ")

def generate_palindrome(n):
    if n == n[::-1]:
        return n
    else:
        while n != n[::-1]:
            r = n[::-1]
            int(n) += int(r)
    return n

generate_palindrome(x)

当然这会返回错误,因为int(n)=int(r)是不可能的。但是,当不使用int时,它会将其添加为字符串,这也是不正确的。

我不确定我离解决方案还有多远。我如何才能正确实现它?


共1个答案

匿名用户

你很接近了。您只需要另一个变量来表示字符串的整数版本。然后明确哪个包含字符串,哪个包含整数:

def generate_palindrome(n):
    if n == n[::-1]:
        return n
    else:
        while n != n[::-1]:   # n needs to be a string for this to work
            r = int(n[::-1])  # r and s need to be numbers for correct addition
            s = int(n)
            n = str(r + s)    # n needs to still be a string for the next loop iteration
    return n

generate_palindrome("989")
# '989'

generate_palindrome("98")
# '8813200023188'

FWIW,我不知道这是否总是保证为每个输入返回一个合理大小的数字。例如,我放弃了generate_palindrome("5798")