100的阶层真的算不出来吗?

本文探讨了如何计算阶乘尾数零的数量,通过分析因子5和25的存在来确定100!的尾数零个数,并展示了使用Lisp解决此类问题的效率。作者还提供了1000和10000阶层的计算示例,解释了为何考虑因子5而不考虑更高次幂的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看到一个蛮有意思的题,是问“100!”的尾数有多少个零。

尾数有多少个零,实际上指的是从这个数的最后一个不为0的数的下一个(也就是0)开始计数,一直到最后一个数(这些数自然都是0)有多少个0。

好吧,也就是说13330330000的尾数有4个零……

一个整数若含有因子5,则必然在求解100!时产生一个0,也就是说我们从5开始for循环,每次循环都给加上5,然后计数器加1。同时如果该整数还能被25整除,计数器还应该再加上1。(关于这段话的详细解释请看下文)

因此代码如下:

#include<stdio.h>

int main()
{
    int a,count =0;
    for(a=5;a<=100;a+=5)
    {
        ++count;
        if(!(a%25))
            ++count;
    }
    printf("100!的尾数有%d个零。\n",count);
    return 0;
}

题目后面进一步问了如何求出任意N!的尾数有多少个零。

#include<stdio.h>

int main()
{
    int n;
    printf("请输入N:\n");
    scanf("%d",&n);
    if(n<0)
        printf("%d的阶层无意义。\n",n);
    else if(n<=4)
        printf("%d的阶层的尾数没有零。\n");
    else
    {
        int a,count =0;
        for(a=5;a<=n;a+=5)
        {
            ++count;
            if(!(a%25))
                ++count;
        }
        printf("100!的尾数有%d个零。\n",count);
    }
    return 0;
}

本文就这样结束了吗?

题目的解答中有这么一段话:先求出100!的值,然后数一下末尾有多少个零。事实上,由于计算机所能表示的整数范围有限,这是不可能的。

首先,什么叫计算机所能表示的整数范围?应该叫int等数据类型的整数范围有限才对,计算机嘛……撑死了只能说不能存储而非不能表示。

另外100的阶层真的求不出来吗?请往下读。

我的博客中有大量关于Lisp,或者说Scheme的博文,使用这个语言,几行代码就能搞定了不是吗?欢迎阅读我的其他博文……

(define (fact n)
  (if (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值