hdu1124

来源:互联网 发布:视频流媒体服务器编程 编辑:程序博客网 时间:2024/06/05 18:15

求N!后面0的个数。

产生0来源是2和5 

2的话 每隔一个就有一个

5的话  比较难得。所以关键就在于n!里面5的个数

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <utility>#include <algorithm>using namespace std;const int maxn=1e9+1;typedef long long ll;ll a[13];void init(){    a[0]=5;    for(int i=1;i<=11;i++)        a[i]=a[i-1]*5;}int main(){    init();    int t;    scanf("%d",&t);    while(t--)    {        ll n;        scanf("%I64d",&n);        ll ans=0;        for(int i=0;i<=11&&a[i]<=n;i++)            ans+=n/a[i];        printf("%I64d\n",ans);    }    return 0;}

在数论里面n/i 代表着 i 的个数有几个  然后n/5(1个5) +n/25(2个5,一个在前面算掉了)  。。。后面类推 这样可以算出 

0 0