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)
两种实现方式打印的结果都是253。count01 比count00更有效率。
-EOF-