spoj.FCTRL超出时间限制

时间:2015-01-08 08:06:10

标签: python python-2.7 optimization

我必须在整数的阶乘结束处生成尾随零的数量。第一个输入是测试用例'T'。下一行T行包含输入整数。输出应该在输入整数的阶乘结束处具有零个数。这是我的代码,但它超出了时间限制。请帮我优化。

T=int(raw_input())
a=[]
for i in range(0,T):

    a.append(int(raw_input()))
def factorial (n):
    fact=1
    while(n>0):
        fact=fact*n
        n=n-1
    return fact

b=[]
for i in range(0,T):
    b.append(factorial(a[i]))


c=[]

for i in range(0,T):
    ans=0
    while(b[i]%10 == 0):
        ans=ans+1
        b[i]=b[i]/10
    c.append(ans)
for i in range(T):
    print c[i],

1 个答案:

答案 0 :(得分:2)

由于输入的numbres很大,你无法计算它们的阶乘。这需要太长时间。考虑在不计算阶乘的情况下计算尾随0的数量的算法。 事实上,每个尾随0出现在乘以5甚至numbres之后。所以你需要在所有numbres中减少输入数量的5个因子。

例如27!以6为零结束,因为在范围(1,27)中5因子只有这些numbres

5(1)10(1)15(1)20(1)25(2)。 25有两个因素为5。