zoukankan      html  css  js  c++  java
  • Leetcode 172 阶乘后的零(数学)

    题目描述:

      给定一个数n,求n的阶乘末尾零的个数。

    题解:

      一些规律:

    • 末尾零的个数与这个数因子中10的个数有关。
    • 10的质因子为2和5,10的个数可以转换为有多少个(2,5)对。然而一个数的质因子分解中,2的个数大于等于5的个数,也就是说末尾0的个数与质因子5的个数有关。 

      

      如果直接用质因子分解的方式求因子5的个数会超时,还需要改进。对于一个数的阶乘,就如之前分析的,5 的因子一定是每隔 5 个数出现一次,也就是下边的样子。

      $n! = 1 * 2 * 3 * 4 * (1 * 5) * ... * (2 * 5) * ... * (3 * 5) *... * n$

      因为每隔 5 个数出现一个 5,所以计算出现了多少个 5,我们只需要用 n/5 就可以算出来。但还没有结束,继续分析。

      $... * (1 * 5) * ... * (1 * 5 * 5) * ... * (2 * 5 * 5) * ... * (3 * 5 * 5) * ... * n$

      每隔 25 个数字,出现的是两个 5,所以除了每隔 5 个数算作一个 5,每隔 25 个数,还需要多算一个 5。也就是我们需要再加上 n / 25 个 5。同理我们还会发现每隔 5 * 5 * 5 = 125 个数字,会出现 3 个 5,所以我们还需要再加上 n / 125 。综上,规律就是每隔 5 个数,出现一个 5,每隔 25 个数,出现 2 个 5,每隔 125 个数,出现 3 个 5... 以此类推。最终 5 的个数就是 n / 5 + n / 25 + n / 125 ...

    AC代码:

      

    public int trailingZeroes(int n) {
        int count = 0;
        while (n > 0) {
            count += n / 5;
            n = n / 5;
        }
        return count;
    }
  • 相关阅读:
    java连接zookeeper实现zookeeper的基本操作
    spring boot 中用@value给static变量赋值
    jquery 点击移动一次body
    Javascript实现导航锚点滚动效果实例
    vue.js 脚手架vue-cli构建了项目,想去除Eslint验证,如何设置?
    jquery 点击切换值
    js同时(onclick)调用多个方法
    修改输入框placeholder文字默认颜色css用法
    js获取星期几
    js计算器
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12680463.html
Copyright © 2011-2022 走看看