下面的代码是我检查一个数字的总和是否为回文的观点,如果总和为回文则将显示总和,否则将重复此过程直到得到回文。设置为执行时,我收到一个超过时间限制的错误。我在哪里需要更正代码?
def pal(n1):
temp=n1
rev=0
while(temp>0):
rev=(rev*10)+(temp%10)
temp=temp/10
sum1=n1+rev
temp=sum1
rev=0
while(temp>0):
rev=(rev*10)+(temp%10)
temp=temp/10
if(rev==sum1):
print(sum1)
else:
pal(sum1)
n=int(input())
pal(n)
我希望数字453
的输出为6666
。
即
453+354=807
(不是回文。请重复此过程)807+708=1515
1515+5151=6666
(这是回文)答案 0 :(得分:1)
您的问题是您要检查while temp > 0:
,但是在该循环中,您正在使用浮动除法:temp=temp/10
。因此条件将始终成立。例如:
>>> 8/10
0.8
>>> 0.8/10
0.08
您想要的是将部门更改为 int部门:
>>> 8//10
0
仍然您可能会考虑使用字符串,在这种情况下这会容易得多:
def pal(n):
rev_n = str(n)[::-1]
sum_str = str(n + int(rev_n))
while sum_str != sum_str[::-1]:
# print(sum_str)
sum_rev = sum_str[::-1]
sum_str = str(int(sum_str) + int(sum_rev))
print(sum_str)
加上注释后的打印内容,将得出:
>>> pal(453)
807
1515
6666
答案 1 :(得分:0)
这里是使用字符串操作执行此操作的一种方法,它比尝试使用数字操作容易得多。这也是您随后描述内容的更直接翻译。 (我看不到您的代码和描述之间的链接...)
def is_palindrome(text):
# : approach1, faster for large inputs
# mid_length = len(text) // 2
# offset = 0 if len(text) % 2 else 1
# return text[:mid_length] == text[:-mid_length - offset:-1]
# : approach2, faster for small inputs
return text == text[::-1]
def palindrome_sum(num):
while not is_palindrome(num):
num = str(int(num) + int(num[::-1]))
return num
num = input() # 453
palindrome = palindrome_sum(num)
print(palindrome)
# 6666