题意:
给n,求n的阶乘末尾的0的个数
思路:
若要末尾出现0,则需要乘数提供2和5
提供的2肯定比5多(因为每一个偶数都可以提供2)
所以末尾0的个数就是n!中所能提供的5的个数
而n!能提供的5的个数可以由因子推出。
例如 10!,乘数5本身提供一个5,10也提供一个5,所以10!=3628800末尾有两个零。
可以推出n!里能被 5 整除的数的个数为 n/5,
但是在这些数里还有一部分能被 25 整除,这些数还能提供5,个数为 n/5/5,
但是在这些数里还有一部分能被 125 整除,这些数还能提供5。。。
因此最终所能提供的5的个数的和为n/5+n/5/5+n/5/5/5+n/5/5/5/5…
直到n被除为0
答案就是上面求出来的能提供的5的个数和
code:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
#define int long long
int solve(int x){
int ans=0;
while(x){
ans+=x/5;
x/=5;
}
return ans;
}
signed main(){
int T;
cin>>T;
while(T--){
int n;
cin>>n;
cout<<solve(n)<<endl;
}
return 0;
}