Codechef Python运行时错误

0 投票
2 回答
1004 浏览
提问于 2025-04-16 04:54

我在用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次方次的迭代,这样你的解决方案也会超时。

撰写回答