思路
这道题目其实也很简单
阶乘最好的一个特点就是数字是连续的
本题求的是末尾的0
正常人都知道,只有2的倍数与5的倍数相乘才能得末尾为0的数
既然这样,我们只要求n以内5的个数
然而 25中包含2个5 125中包含3个5!!!
但是,在细想一下,n/5是求n以内5的倍数,这时25的倍数其实已经可以当作除去一个5了
再用n/25,求出25的倍数后,同理125的倍数也除去了一个5
......
最后,其实本题中只要把数据范围最大值1e9以内的所有的数除(注意是除,不是除以)5的所有幂再将和相加,即可求出答案
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e5+1e4,M=1e3+1e2;
const ll Maxn=0x3ffffff,Minm=-0x3ffffff;
ll n,ans;
signed main()
{
cin>>n;
for(ll i=5;i<=1e9;i*=5)
ans+=(n/i);
cout<<ans;
}
tql
一句话说明白:综上,规律就是每隔 5 个数,出现一个 5,每隔 25 个数,出现 2 个 5,每隔 125 个数,出现 3 个 5… 以此类推。
最终 5 的个数就是 n / 5 + n / 25 + n / 125 …
厉害