http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=118
求n!后面有多少个0(1<=n<=1000000000),显然,n!肯定存不下。
2*5=10,所以有多少个2*5就有多少个0,所以只须求n!中因子2和因子5的个数。根据结论有
f(2) = [ n / 2 ] + [ n / 4 ] + [ n / 8 ] + ……
f(5) = [ n / 5 ] + [ n / 25 ] + [ n / 125 ] + ……
显然f(2)不会小于f(5),那么只须求f(5)就行了。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 typedef long long ll; 8 9 int main() 10 { 11 int n,m; 12 cin>>m; 13 while(m--) 14 { 15 cin>>n; 16 int cnt=0; 17 while(n) 18 { 19 cnt+=n/5; 20 n=n/5; 21 } 22 cout<<cnt<<endl; 23 } 24 }