我必须在整数的阶乘结束处生成尾随零的数量。第一个输入是测试用例'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],
答案 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。