在python代码中获取索引错误
你好,我在接电话 索引器:索引超出“nz[i]处的范围。追加(c) 这个程序应该计算N的阶乘中的尾随零。在python代码中获取索引错误,python,Python,你好,我在接电话 索引器:索引超出“nz[i]处的范围。追加(c) 这个程序应该计算N的阶乘中的尾随零。 你能帮我优化我的代码吗,这样它也可以运行N的大值吗?nz是一个空列表。它没有任何元素,所以nz[i]总是会引发索引器。也许你的意思是nz.append(c)即在nz末尾添加c这是如何工作的: list.append(x) 在列表末尾添加一项;相当于[len(a):]=[x] 因此,您可能需要将nz[i].append(c)更改为nz.append(c),因为您的i索引已经由append函数处
你能帮我优化我的代码吗,这样它也可以运行N的大值吗?
nz
是一个空列表。它没有任何元素,所以nz[i]
总是会引发索引器。也许你的意思是nz.append(c)
即在nz
末尾添加c
这是如何工作的:
list.append(x)
在列表末尾添加一项;相当于[len(a):]=[x]
因此,您可能需要将nz[i].append(c)
更改为nz.append(c)
,因为您的i
索引已经由append函数处理。实际上,您假设列表中有一个i
元素,这是错误的,因为您使用的是空列表
关于优化,您的问题可能是由于递归限制造成的。在python shell中尝试导入sys;sys.getrecursionlimit()
,结果应该是1000左右
交换阶乘函数的迭代版本可能是一个开始
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]
nz
是一个空列表。nz[i]
对任何i
都无效。在i
的值为多少时,您会出错?如果您想快速解决此问题,您必须避免计算阶乘。使用正确的方法,您应该能够在一分钟内手动计算1000!
的尾随零的数量。然后将其推广到算法解决方案。同样,pl请说明如何优化程序,以便为10000000数量级的大输入提供快速输出。也请说明如何优化程序,以便为10000000数量级的大输入提供快速输出?还请说明我以前使用过递归函数或阶乘,但它给出了错误(返回语句所在的给定行号出现错误)对于10^8的较大输入,请!您可以编辑您的评论,无需“垃圾邮件”“他们!不!不是一种交互式的方式,而是一种计算10^8或10^9量级非常大的No.s的阶乘的高效算法方式???请阅读此处的pdf:)
def fact(n):
r = 1
for x in range (n):
r = r * (x+1)
return r