Python 超出spoj.FCTRL的时间限制
我必须在整数的阶乘末尾生成尾随零的数量。第一个输入是测试用例“T”的编号。接下来的T行包含输入整数。输出应该在输入整数的阶乘末尾有零的数目。这是我的代码,但超出了时间限制。请帮我优化Python 超出spoj.FCTRL的时间限制,python,python-2.7,optimization,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-
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],
由于输入numbers相当大,因此无法计算它们的阶乘。时间太长了。考虑一下计算尾随0数而不计算阶乘的算法。 事实上,每个尾随的0在5乘以一些偶数之后出现。因此,你需要计算所有数字中的5个因子,以降低输入 例如27!以6零结束,因为在范围(1,27)中,5因子只有这些数值 5(1)10(1)15(1)20(1)25(2)。25有两个5的因子