美文网首页
n 的阶乘尾部零的个数 (lintcode:trailing-z

n 的阶乘尾部零的个数 (lintcode:trailing-z

作者: v1coder | 来源:发表于2017-12-31 16:22 被阅读0次

计算出 n 阶乘中尾部零的个数。
例如11! = 39916800,因此应该返回 2

代码1:

def trailingZeros(n):
  count = 0
  sum1 = 1
  while n:
    sum1 *= n
    n -= 1
  while sum1 % 10 == 0:
    count += 1
    sum1 //= 10 
  return count

print trailingZeros(100)

上面这段代码不能计算太大的数,比如输入1001171717就不行了。

转换另一个思路。

一个数 n 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数。而 2 的个数是远远多余 5 的个数的, 因此求出 5 的个数即可。求解因子 5 的个数的方法是用 n 不断除以 5, 直到结果为 0。

def trailingZeros(n):
  if n < 0:
    return 'Wrong'
  elif n == 0:
    return '1'
  else:
    zero_num = 0
    while n:
      n //= 5
      zero_num += n
    return zero_num

(因子:假如整数 n 除以 m,结果是无余数的整数,那么我们称 m 就是 n 的因子。 需要注意的是,唯有被除数、除数、商皆为整数,余数为零时,此关系才成立。)


lintcode 原题

20171231

相关文章

  • n 的阶乘尾部零的个数 (lintcode:trailing-z

    计算出 n 阶乘中尾部零的个数。例如11! = 39916800,因此应该返回 2 代码1: 上面这段代码不能计算...

  • lintCode题解(2)

    标签(空格分隔): lintCode 题目: 尾部的零 描述: 设计一个算法,计算出n的阶乘中尾部零的个数 样例 ...

  • N阶乘尾部的0个数

    N阶乘尾部的0个数 描述 设计一个算法,计算出n阶乘中尾部零的个数 思路: 1、1 * 2 * 3 * ... *...

  • 2. 尾部的零

    题目:设计一个算法,计算出n阶乘中尾部零的个数(JAVA) 审题:输入:目标数n 输出:n!尾部0的数量...

  • 2、尾部的零

    题目描述 设计一个算法,计算出n阶乘中尾部零的个数 思路 n阶乘能产生尾数0,换言之就是问n阶乘能乘出多少个101...

  • LintCode算法刷题之尾部的零

    链接:尾部的零 描述 设计一个算法,计算出n阶乘中尾部零的个数 样例 样例 1:输入: 11输出: 2样例解释:...

  • java面试题之求长整数中所有0和尾数0的个数的策略《三》

    /** 求出:1000的阶乘所有零和尾部零的个数,不用阶乘。*/ 总结:①当需求的数的个数超过int和long的类...

  • 尾部的零

    设计一个算法,计算出n阶乘中尾部零的个数 样例11! = 39916800,因此应该返回 2 挑战O(logN)的...

  • 尾部的零

    设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 挑战 O(logN...

  • lintcode2

    描述 设计一个算法,计算出n阶乘中尾部零的个数样例11! = 39916800,因此应该返回 2挑战O(logN)...

网友评论

      本文标题:n 的阶乘尾部零的个数 (lintcode:trailing-z

      本文链接:https://www.haomeiwen.com/subject/iakagxtx.html