HDU1124求n的阶乘后0的个数

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1124

题意:给出n,求n!的末尾0数

解析:对于n!,要想出现0,那么有2*5和4*5,而4*5又可以分成2*2*5,所以只有2*5可以提供0。2的出现次数肯定比5多,所以5的个数就是末尾0的个数。求法就是不停/5,用cnt累加结果,cnt就是n!里可以分成的5的个数了。

      20:20/5==4。cnt=4。因为20!=20*.....*15*......10*......5,一共是4个数提供了5。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long ll;
int ac(ll x)
{
    ll cnt=0;
    while(x)
    {
        cnt+=x/5;
        x=x/5;
    }
    return cnt;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll n;
        cin>>n;
        cout<<ac(n)<<endl;
    }
}
原文地址:https://www.cnblogs.com/liyexin/p/12554685.html