阶乘末尾0的个数

Posted BobHuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阶乘末尾0的个数相关的知识,希望对你有一定的参考价值。

问题很简单:给定一个整数n,那么n的阶乘末尾有多少个连续的0呢?

那个可以去求这个阶乘吗,大数的代码上去一套?这个大数求出来肯定是很慢的,还有其他方法吗,你可以观察一个产生0,本质是2*5,出现了2一定会出现5,2的个数会大于5的个数,所以我可以直接统计5的个数,统计每个数有几个因子5

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while (cin >> n)
    {
        int num = 0 ,i;
        for(int m=1;m<=n;m++)
        {
            i=m;
            while (i % 5 == 0)
            {
                i=i/5;
                num++;
            }
        }
        cout << num << endl;
    }
}

当然可以直接关注5

f(5!) = 1 + f(1!) = 1
f(10!) = 2 + f(2!) = 2
f(20!) = 4 + f(4!) = 4
f(100!) = 20 + f(20!) = 20 + 4 + f(4!) = 24
f(1000!) = 200 + f(200!) = 200 + 40 + f(40!) = 240 + 8 + f(8!) = 248 + 1 + f(1) =249

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    while (cin >> n)
    {
        int num = 0;
        while (n > 0) {
            num += n / 5;
            n /= 5;
        }
        cout << num << endl;
    }
}

 

以上是关于阶乘末尾0的个数的主要内容,如果未能解决你的问题,请参考以下文章

求N的阶乘末尾有几个0

计算n的阶乘末尾有多少个0

算法-计算阶乘n!末尾0的个数

p74 阶乘末尾0的个数(leetcode 172)

计算50的阶乘,结果末尾处有多少个0

计算n的阶乘(n!)末尾0的个数