1024!中有多少个零

这是一篇翻译练习,涉及的语法单词什么的其实很简单。

原文地址:http://www.zhihua-lai.com/acm/how-many-zeros-at-the-end-of-1024/

正文:

  这是来自谷歌的面试题,难度是入门级。

  问题是,在1024!的数值结果中(即1*2*3*4*……*1024),有多少个零。

  第一个想法是用数组计算结果来暴力破解(标准数据类型不能操作这么大的数)。然而,这是非常低效的办法,因为我们并不真的关心最后的数字。分配数组是在浪费时间和空间。

  第二个想法是对除数因子2和5进行计数。每一个0都由10产生,而10又由2和5组成。因子2的数量远大于5,因此,我们只需考虑因子5的数量即可,这就是答案。

  你当然还可以考虑10和2的数量,但是选择5是最简单的。

  考虑实现,你可以利用只计算除数5的办法将O(n^2)优化到O(n)。

 1 #!/usr/bin/env python

 2 # http://acm.zhihua-lai.com

 3  

 4 def count00(x):

 5     y = 0

 6     for i in xrange(5, x + 1):

 7         while i % 5 == 0:

 8             i /= 5

 9             y += 1

10     return y

11  

12 def count01(x):

13     y = 0

14     k = 5

15     while k < x:

16         y += x / k

17         k *= 5

18     return y

19  

20 print count00(1024)

21 print count01(1024)

  两种实现方式打印的结果都是253count01 比count00更有效率。

-EOF-

你可能感兴趣的:(翻译)