【问题标题】:Time limit exceeded on spoj.FCTRLspoj.FCTRL 超过时间限制
【发布时间】:2015-01-22 06:38:56
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 optimization


    【解决方案1】:

    由于输入数字非常大,您无法计算它们的阶乘。时间太长了。考虑计算尾随 0 的数量而不计算阶乘的算法。 事实上,每个尾随 0 出现在将 5 乘以一些偶数之后。因此,您需要计算所有数字中的 5 个因子的数量以降低输入。

    例如 27!以 6 个零结尾,因为在 (1, 27) 范围内,5 因子只有这些数字

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2016-04-07
      • 1970-01-01
      相关资源
      最近更新 更多