python-3.x - 我在以下代码中收到“超出时间限制”错误。如何修复该错误
问题描述
以下代码是我检查一个数字的和是否是回文的观点。如果和是回文,则将显示总和。否则将重复该过程,直到我们得到回文。当它被设置为执行时,我得到一个超出时间限制的错误。我需要在哪里更正代码?
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
. IE
453+354=807
(不是回文。所以重复这个过程)807+708=1515
1515+5151=6666
(这是一个回文)
解决方案
您的问题是您正在检查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
推荐阅读
- python - 用三个答案搜索谷歌问题的算法
- browser - WebRTC 的浏览器 mDNS 策略
- java - 将 EntityGraph 与 Hibernate Search ORM 一起使用
- node.js - 我如何离线使用 npm 包?
- excel - 保护 VBA Excel 不被他人保存
- javascript - 如何在带有 webpack 4.29 的 React 16.7 中使用 LESS?
- ssl - Magento 2 登录市场的 SSL 错误
- metal - Mac 应用程序的金属帧缓冲颜色
- karate - 我们可以创建队列数据消费者吗?
- django - 自定义 MulipleChoiceField