N!末尾0的个数

1476: L先生与阶乘

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 821   Solved: 310
[ Submit][ Status][ Web Board]

Description

没错,可怜的L先生又遇到了一道数学难题!

n的阶乘的末尾有多少个0?

Input

多测试例,处理到文件结束。(总测试例数量<15000)

每行有一个测试例,为一个非负整数n(0<=n<15000)。

Output

每个测试例对应的输出占一行

Sample Input

1
2
3

Sample Output

0
0
0

我们想,Y还能怎么样得到?举个例子 25的阶乘中,总共有6个五,其中5,10,15,20,各贡献一个,25贡献两个,也可以说成,5,10,15,20,25各贡献一个,25又额外贡献 一个,即5的倍数各贡献一个5,25的倍数各贡献一个5,即Y=[25/5] + [25/25]。同理,125中,5的倍数各贡献一个5,25的倍数各贡献一个5,125的倍数也各贡献一个5,所以Y=[125/5] + [125/25] + [125/125],所以可得公式:

Y = [N/5] + [N/52] + [N/53] + …

转载: 传送门


#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
typedef long long LL;
int GetZeroNum(int n)
{
    int num = 0;
        while(n != 0)
        {
            num=num+n/5;
            n=n/5;
        }
    return num;
}
int main()//因为统计了质数个数可以用在线判断用二分
{
   int ret=0,i,n,j;
    while(scanf("%d",&n)!=EOF){
            ret=0;
        for(i=1;i<=n;i++)
        {
            j=i;
            while(j%5==0)  {
                ret++;
                j/=5;
            }
        }
        printf("%d\n",ret);
    }
    return 0;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值