我似乎无法正确解决以下问题。我必须编写一个函数,将正整数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
时,它会将其添加为字符串,这也是不正确的。
我不确定我离解决方案还有多远。我如何才能正确实现它?
你很接近了。您只需要另一个变量来表示字符串的整数版本。然后明确哪个包含字符串,哪个包含整数:
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")
。