问题:N的阶乘(N!)中的末尾有多少个0?

例如:N = 5,N! = 120.末尾有1个0.
分析:想到这个问题,有人可能第一反应就是现求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0。但是转念一想,会不会溢出,等等。
其实,从"那些数相乘可以得到10"这个角度,问题就变得比较的简单了。
首先考虑,如果N的阶乘为K和10的M次方的乘积,那么N!末尾就有M的0。如果将N的阶乘分解后,那么
N的阶乘可以分解为: 2的X次方,3的Y次方,4的5次Z方,.....的成绩。由于10 = 2 * 5,所以M只能和X和Z有关,每一对2和5相乘就可以得到一个10,于是M = MIN(X,Z),不难看出X大于Z,因为被2整除的频率比被5整除的频率高的多。所以可以把公式简化为M=Z.
由上面的分析可以看出,只要计算处Z的值,就可以得到N!末尾0的个数
方法一
要计算Z,最直接的方法就是求出N的阶乘的所有因式(1,2,3,...,N)分解中5的指数。然后求和

int fun1(int n)
{
    int num = 0;
    int i,j;
    
    for (i = 5;i <= n;i += 5)
    {
        j = i;
        while (j % 5 == 0)
        {
            num++;
            j /= 5;
        }
    }
    
    return num;
}

方法二:
Z = N/5 + N /(5*5) + N/(5*5*5).....知道N/(5的K次方)等于0
公式中 N/5表示不大于N的数中能被5整除的数贡献一个5,N/(5*5)表示不大于N的数中能被25整除的数再共享一个5.......

int fun2(int n)
{
    int num = 0;
    
    while(n)
    {
        num += n / 5;
        n = n / 5;
    }
    
    return num;
}

N的阶乘(N!)中的末尾有多少个0相关推荐

  1. 判断N!末尾有多少个0

    问题:N的阶乘(N!)中的末尾有多少个0? 例如: N = 5,N! = 120.末尾有1个0. N = 10,N! = 3628800.末尾有2个0. 分析:看到这个问题,有人可能第一反应是先求出N ...

  2. N的阶乘末尾有多少个0

    例如:N = 5,N! = 120.末尾有1个0. 分析:想到这个问题,有人可能第一反应就是现求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0.但是转念一想,会不会溢出,等等. 其实,从& ...

  3. 100 的阶乘末尾有多少个0?

    本篇文章是在osChina的代码分享里下载下来的,这里把它整理一下. 前一段时间看到一个往年程序竞赛的题解, 有一个题目说的是求 100 的阶乘末尾有多少个 0. 题解中给出的讲解提到, 一个数 n ...

  4. 【经典智力题】1024! 末尾有多少个0?——“计算阶乘末尾0的数量”问题引出

    网上有这样一个广为流传的有趣问题: 1024! 末尾有多少个0? 相应的解法是: 末尾0的个数取决于乘法中因子2和5的个数.显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数. 是5的倍 ...

  5. C语言求1000后面有多少个0,1到1000的阶乘 求1000阶乘的结果末尾有多少个0

    急求.用java算1到1000阶乘的末尾有几个零? 急求.用java算1到1000阶乘的末尾有几个零?急求具体的java程序怎么写? 1000的阶乘后面有多少个零? 从1乘到1000得出的结果后面有多 ...

  6. java 求1000的阶乘_求1000阶乘的结果末尾有多少个0

    素数是个科学计算中很重要的一个概念,素数也叫质数.素数就是最纯净的数,没有任何其它成分的数,其它的数都可以说是由素数相乘出来的. 所以,理解好素数,对于数学和程序来说,有重要的意义. 题目是:求100 ...

  7. 每天一道LeetCode-----计算n的阶乘末尾有多少个0

    Factorial Trailing Zeroes 原题链接Factorial Trailing Zeroes 计算n!(n的阶乘)末尾有多少个0 思路: 0实际上来源于10,而10来源于2×5,所以 ...

  8. nefu 753 n!末尾有多少个0

    Problem : 753 Time Limit : 1000ms Memory Limit : 65536K description 计算N!末尾有多少个0 input 输入数据有多组,每组1行,每 ...

  9. 编程之美3——N!末尾有多少个0

    因为n!是一个非常大的数,所以不能通过常规的方法,求出n!的值之后,再判断它的末尾有多少个0. 这里的关键就是,n!的末尾有多少个0,取决于n!中,质因数 5 的个数. 如:12!=479001600 ...

最新文章

  1. ATL的GUI程序设计(3)
  2. CeSharp支持MP4
  3. Linux内核学习资料
  4. div+css盒子居中
  5. 简单七步让你轻松安全迁移网站
  6. Go-Web框架-Beego架构(二)
  7. 猫猫学iOS(四十四)之网易彩票自定义图片在右边的Button_弹出view_ios6,7简单适配...
  8. Mysql读写锁保姆级图文教程
  9. 翻译:Hystrix - How To Use
  10. SQL中到底要不要用WHERE 1=1
  11. 《算法设计与分析 第2版 屈婉玲等》第五章习题答案
  12. cl.exe nmake.exe
  13. AForge.net库类下载方式
  14. 大数据认知实习的实习目的_如何在数据实习中取得成功
  15. 你真的了解“无纸化办公”了吗?
  16. Java生成二维码,Spring Boot整合ZXing实现二维码生成,支持自定义二维码
  17. 9步搞定:用迅雷等工具下载百度网盘资源
  18. [生存志] 第99节 白起奋威屠百万
  19. 二月、三月校招面试复盘总结(二)
  20. 最简单的Document解析xml文件

热门文章

  1. php程序员自我描述_PHP程序员面试自我介绍简洁
  2. html5 微信原生登录,用HTML5实现微信密码输入框
  3. 手机可以模拟但小米手环4(nfc)不能模拟加密卡的简单解决方案
  4. LabVIEW练习6
  5. 网络爬虫笔记4,信息提取之Re库
  6. 新能源汽车与三电技术
  7. Java+SpringBoot+vue英语单词学习网站
  8. 未找到 Oracle 客户端和网络组件问题
  9. 继“换帅”之后,通用电气又将出售智能平台业务
  10. 学习Linux命令(24)