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-

posted @ 2012-08-22 17:14  findingsea  阅读(442)  评论(1编辑  收藏  举报