如何确定一个N!末尾有多少个零

转载 2015年08月30日 15:02:49
  • 622

题目:1*2*3*……*100 求结果末尾有多少个零

分析:一般类似的题目都会蕴含某种规律或简便方法的,阶乘末尾一个零表示一个进位,则相当于乘以10而10 是由2*5所得,在1~100当中,可以产生10的有:0 2 4 5 6 8 结尾的数字,显然2是足够的,因为4、6、8当中都含有因子2,所以都可看当是2,那么关键在于5的数量了那么该问题的实质是要求出1~100含有多少个5由特殊推广到一般的论证过程可得:

1、 每隔5个,会产生一个0,比如 5, 10 ,15,20.。。
        2 、每隔 5×5 个会多产生出一个0,比如 25,50,75,100 
        3 、每隔 5×5×5 会多出一个0,比如125.

所以100!末尾有多少个零为:        100/5+100/25=20+4=24那么1000!末尾有多少个零呢?同理得:        1000/5+1000/25+1000/125=200+40+8+1=249
到此,问题解决了,但我们在学习过程中应当学会发散思维、举一反三
接着,请问N!的末尾有多少个零呢??
其实 也是同理的
        N/5+N/25+……

如计算 2009! 的末尾有多少个0:2009/5 = 401

1~2009之间有 401 个数是 5 的倍数(余数省略).401/5 = 80

1~2009 之间有 80 个数是 25 的倍数.80/5 = 16

1~2009 之间有 16 个数是 125 的倍数.  16/5 = 3

1~2009 之间有 3个数是 625 的倍数.      3/5 = 0

1~2009 之间有 0 个数是 3125 的倍数.

所以, 2009! 的末尾有 401 + 80 + 16 + 3 = 500 个0.

看下面代码:

[cpp] view plain copy
  1. int fun1(int n)
  2. {
  3. int num = 0;
  4. while (n)
  5. {
  6. num += n / 5;
  7. n = n / 5;
  8. }
  9. return num;
  10. }
[cpp] view plain copy
  1. int fun2(int n)
  2. {
  3. int num = 0;
  4. int i, j;
  5. for (i = 5; i <= n; i += 5)
  6. {
  7. j = i;
  8. while (j % 5 == 0)
  9. {
  10. num++;
  11. j /= 5;
  12. }
  13. }
  14. return num;
  15. }

此题扩展:求扩展N!的二进制表示中最低位1中的位置。相当于求质因数的2的个数。

10000的阶乘,末尾有多少个连续的零?答案: 10000/5+10000/25+10000/125+10000/625+10000/3125=2000+400+80+16+3=2499

1到100的阶乘的和的末位数是几?答案:3这题找规律,1!=1; 2!=2; 3!=6; 4!=24; 5!=120;…你可以发现5的阶乘之后的末尾都是0。所以只有1到4的阶乘会产生个位数,所以1+2+6+24=33,所以答案就是3!

转载于:https://www.cnblogs.com/zhumengdexiaobai/p/8652915.html

7-n!末尾有几个0相关推荐

  1. android 计算器显示不全,Android5.0 计算器计算结果不准确和结果末尾的多余的‘0’没有省略的解决方法...

    Android5.0 计算器计算结果不准确和结果末尾的多余的'0'没有省略 一.问题的描述: [测试步骤] 1.进入计算器 2.输入 100-99.9 3.查看计算结果 [测试结果] 1.结果为: 0 ...

  2. pku1401 Factorial 计算n!末尾有几个0?

    /*Author:yzm求阶乘末尾0的个数因式分解,有多少对2和5,末尾就有多少个0而总是2多5少,所以5的个数决定了0的个数进位思想:先看有多少个5 (v除以5)再看有多少个25 (v再除以5)再看 ...

  3. 面试题:计算 n!阶乘的结果的末尾有几个0

    前言 首先基于一个事实:我们不可能真的把 n! 的结果计算出来,再去数结果的末尾有几个0:n 很小还好,如果n很大,甚至趋近于无穷大,我们是不可能这样做的.原因主要有二: 一般计算机的计算能力和存储能 ...

  4. 1000!末尾 有几个0

    题目:1000!末尾有几个0 1到1000中2的个数远多于5的个数,2*5可得到一个0. 所以求得1到1000中有多少个5就可以求得1000!的末尾有几个0. 分析 5的1次幂5的倍数增加1个0 (5 ...

  5. 一个正整数 n ,求n!的末尾有几个0

    import java.util.Scanner;/*** 输入一个正整数 n ,求n!的末尾有几个0* 例如:10! = 3628800,则返回 2*/ public class Test1 {pu ...

  6. 求10000!的阶乘末尾一共有多少个0

    结果中的 0 是如何产生的呢? 1.有些数字本身含有 0 ,例如数字10.20.30- 2.数字(10的整数倍以外的数字)相乘结果得到10的倍数,如尾数为2.4.6.8的数字与5相乘 而每一个10的整 ...

  7. n!末尾有多少个0以及n!末尾第一个非0数字

    (1)n!末尾有多少个0 第一种思路: n!=n*(n-1)*(n-2)*....3*2*1,而如果要出现0,必须得有2和5出现,但是明显n!中5的因子个数少于2的因子个数,即转化为求 n!中因子5的 ...

  8. c语言 字符串数组末尾,C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符...

    利用宏定义一个字符串#define MYPHONE "AT+CMGS" 字符数组的方式来定义一个字符串unsigned char SMS[]="HELLO, WELCOM ...

  9. 数论函数:数100阶乘的十进制表示数末尾有几个0?

    1.原理 如果 p^a || n ,p 为素数, p^a 表示 p^a 可以整除n ,p ^(a+1) 不能整除 n .高斯函数取整性质. 2.解释 原问题 等价于100! 可以被10的几次方整除.因 ...

最新文章

  1. MySql常用命令集Mysql常用命令showdatabases;显示数据库createdatab
  2. 【问题】windows网络问题快速诊断方法或工具。终于调通了MQTT,论坑爹的windows防火墙!...
  3. SQLServer2000同步复制技术实现步骤作者
  4. 多线程执行sql报错处理
  5. 什么是软件测试资产,观点:当前是国内推广软件资产管理的最佳时期
  6. windows系统 ping Telnet等系统自带命令无法使用原因及解决方法
  7. TCP三次握手和四次挥手详解 --- 转载
  8. 读取SqlServer表名及结构
  9. 深入理解SYN***.+防范思想及ROS设置
  10. python自动修改论文格式_如何轻轻松松修改论文格式?
  11. 道格拉斯-普克抽稀算法 曲线平滑
  12. Predefined Evenly-Distributed Class Centroids(PEDCC)预定义类中心做分类解读
  13. 织梦dede canonical 标签页面设置(最新完美修改)
  14. 安卓抓jdwskey
  15. Android ninja介绍
  16. 别害怕,C++容器的迭代器其实好用又不难
  17. ES6, ES7, ES8, ES9 以及 ES10 新特征
  18. 2021年电工杯B体详细思路分析
  19. php 随机获取字母,深入PHP获取随机数字和字母的方法详解
  20. 张景明:方剂【方歌】——祛暑剂

热门文章

  1. nRF51822 SDK初体验
  2. html浏览器引擎表示,html – Web浏览器引擎和特殊字符呈现
  3. Mac osx系统中virtual box 中的Ubuntu系统的全屏显示问题解决
  4. 【计算机组成原理】逻辑运算
  5. 如何在Ubuntu 14.04下安装OpenGL开发环境
  6. 【Ubuntu-Docker】ubuntu16.04(18.04)Docker安装配置与卸载
  7. 【dlib opencv - detector landmark】 ubuntu上针对dlib-hog和opencv haar人脸检测与landmar-68在不同平台上运行时间实验结果汇总
  8. 源代码安装g95编译器
  9. Adopting Modern Objective-C
  10. 【目标检测_概述】recent advances in deep learning for object detection_2019