地址: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; } }