lintcode 求n!中末尾0 的个数

作者: yzawyx0220 | 来源:发表于2016-12-07 11:13 被阅读34次

我们只需要考虑哪些数相乘可以得到10即可,因为2*5 = 10,因此我们只需要找到2和5的个数的较小的一个值,因为能被2整除的数多于能被5整除的数,因此题目转换成包含因子5的个数。
代码如下:

class Solution {
 public:
    // param n : description of n
    // return: description of return 
    long long trailingZeros(long long n) {
        long long num = 0;
        for (int i = 5;i <= n;i += 5) {
            int j = i;
            while (j % 5 == 0) {
                num++;
                j /= 5;
            }
        }
        return num;
    }
};

可是提交的时候显示超过了时间限制,于是不得不考虑另一种方法。
设X = (n/5) + (n/(5*5)) ......
也就是说不大于n的数中,能被5整除的数贡献一个5,能被25整除的数再贡献一个5......
代码如下:

class Solution {
 public:
    // param n : description of n
    // return: description of return 
    long long trailingZeros(long long n) {
        long long num = 0;
        while (n) {
            num += n/5;
            n /= 5;
        }
        return num;
    }
};
  

通过。

相关文章

  • lintcode 求n!中末尾0 的个数

    我们只需要考虑哪些数相乘可以得到10即可,因为2*5 = 10,因此我们只需要找到2和5的个数的较小的一个值,因为...

  • 算法--求n!末尾的0的个数

    给定一个整数n,求解它的阶乘的乘积里末尾0的个数。举个例子,比如3! = 1 * 2 * 3 = 6,末尾0的个数...

  • n!中末尾0的个数统计

    代码:

  • 算法-约瑟夫环

    有一个数组a[n]顺序存放0~n-1,要求每隔step个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉...

  • 001--20200408刷题

    1、答案链接 有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一...

  • 每隔2个数删除一个数的删数问题

    问题:有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉...

  • 计算n阶乘末尾0的个数

    ``` def count_zero(n): r = n// 5 if r < 5: return r else:...

  • 计算阶乘n!末尾所含0的个数

    今天在网上看到这么一个题目,怎么计算阶乘n!末尾有多少个零呢.对于想我这种数学只在初中水平的人来说就只知道阶乘是类...

  • 算法训练4

    题目描述输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以...

  • java——末尾0的个数

    【题目描述】输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n =10; n! = 3628800,所...

网友评论

    本文标题:lintcode 求n!中末尾0 的个数

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