文章标题

阶乘的0

时间限制:3000 ms | 内存限制:65535 KB

难度:3

描述 计算n!的十进制表示最后有多少个0
输入第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)输出输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1样例输入6
3
60
100
1024
23456
8735373
样例输出0
14
24
253
5861
2183837

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int m;
        int c=0;
        scanf("%d",&m);

        if(m<5)
            printf("0\n");
        else
        {
            while(m>=5)
            {
                c+=m/5;
                m/=5;
            }
            printf("%d\n",c);
        }

    }
    return 0;
}

需要用数学规律总结才能很高效地写出代码,大神的思路:
(1)当n<5时,n!=0
(2)当n>=5时,有 f(N!) = k + f(k!), 其中k = N / 5;
例如:f(100!)=20+f(20!)=20+(4+f(4!))=24

此题属于经典题型,做多了就知道这个结论了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值