Codechef Python运行时错误
我在用Python提交代码到CodeChef的时候,总是遇到运行时错误。有没有人能帮帮我?我也试着回答其他问题,但还是同样的错误。不过在我自己的电脑上运行是没问题的!(我在电脑上用的是Python 2.6.5,而提交的答案是用Python 2.5检查的)这个题目是简单级别的,但我却遇到了运行时错误。
我的代码
import sys
def factorial_zeros(f):
i=0
j=0
for x in range (1,f+1):
if x%10 == 0:
while x%10 == 0:
x= x//10
i +=1
while x%5 == 0:
x= x//5
j +=1
elif x%5 == 0:
while x%5 == 0:
x= x//5
j +=1
l = i+j
return l
l=[]
i=int(raw_input())
for x in range(i):
f = int(raw_input())
f= factorial_zeros(f)
if x == i-1:
sys.stdout.write(str(f))
else:
print f
2 个回答
1
这个程序在2.6、2.5和2.4版本下都能正常运行。i, j = 0, 0
这个写法从很早的Python版本(比如1.5)就可以用了。程序甚至能读取输入并正确计算结果,虽然速度有点慢。不过我建议你用 sys.stdin.readline().strip()
来代替 raw_input()
。
除非你能具体说明你遇到的是什么 RuntimeError
,最好还附上错误的详细信息,否则几乎没人能帮你,因为大家都在度假。
2
我不在Codechef上比赛或提交代码,但据我所知,它使用的是Python 2.5,而不是2.6。也许你用的某些东西是专门针对2.5的?(虽然我找不到有什么是这样)。
编辑:
现在看来,问题根本不在于Python版本。注意题目中提到的输入值N可以大到10的9次方。用这么大的f去尝试range(1,f+1)
会让解释器试图创建一个包含10的9次方个元素的list
。这显然会超过评测机器的内存限制,从而导致一个未捕获的异常,表现出来就是你看到的运行时错误(RTE)。
顺便说一下,你解决问题的方法是错的。即使你把range
换成xrange
来避免内存限制,你仍然会尝试10的9次方次的迭代,这样你的解决方案也会超时。