def fact(n):
fac = 1
while (n>1):
fac = fac*n
n -= 1
return fac
z = 0
t = int(raw_input())
nz = []
for i in range(0,t):
c = 0
n = int(raw_input())
z = fact(n)
z = list(str(z))
for j in range(len(z)-1,1,-1):
if z[j] != '0':
break
else:
c +=1
nz[i].append(c)
for k in range(0,t):
print nz[k]
你好我得到了
Indexerror:索引超出范围“nz [i] .append(c)
该程序应计算N的阶乘中的尾随零。 你还可以帮我优化我的代码,所以它也可以运行N的大值?
答案 0 :(得分:6)
nz
是空列表。它没有任何元素,因此nz[i]
总会引发IndexError
。也许你的意思是nz.append(c)
即。在c
的末尾添加nz
。
答案 1 :(得分:0)
这是append()的工作方式:
list.append(x)的
将项目添加到列表的末尾;相当于[len(a):] = [x]。
因此您可能希望将nz[i].append(c)
更改为nz.append(c)
,因为您的i
索引已由附加功能处理。您实际上假设您的列表中有i
元素,这是错误的,因为您使用的是空列表
关于优化,您的问题可能是由于您的递归限制。在你的python shell中尝试import sys; sys.getrecursionlimit()
,你应该看到类似1000的结果。
交换因子函数的迭代版本可能是一个开始
def fact(n):
r = 1
for x in range (n):
r = r * (x+1)
return r