zoukankan      html  css  js  c++  java
  • 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-

  • 相关阅读:
    修改表结构
    enum/set 约束
    MYSQL 数据类型
    表和数据的基础操作
    存储引擎
    mysql
    HTML 介绍
    selor模块
    select
    协程
  • 原文地址:https://www.cnblogs.com/findingsea/p/2651186.html
Copyright © 2011-2022 走看看