hdu 1124 Factorial

来源:互联网 发布:网络飚车游戏 编辑:程序博客网 时间:2024/05/01 08:38

题意:求n!的末尾有多少个0?

题解:想要末尾为,只有2*5得到,将n!分解质因数,得到a个2和b个5,则答案就是min(a,b);我们知道1~n中有n/2个是2的倍数,n/4个是4的倍数...

所以分解质因数中2的个数是(n/2+n/(2^2)+n/(2^3)+...),同理得到5的个数。我们可以发现5的个数必定比2少,所以只要求5的个数即可。

ans=(n/5+n/25+n/125+...)

耗时:500MS(主要是cin,cout耗得,想要少点,可以用scanf,printf)



#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <iostream>#include <algorithm>using namespace std;#define LL __int64int main(){    int T,n;    cin>>T;    while(T--)    {        cin>>n;        int ans=0;        while(n)        {            ans+=n/5;            n=n/5;        }        cout<<ans<<endl;    }    return 0;}



原创粉丝点击