输入一个自然数n,求表达式 f(n) = 1!*2!*3!*.....*n! 的结果末尾有几个连续的0?

输入描述:

自然数n

输出描述:

f(n)末尾连续的0的个数

输入例子1:

11

输出例子1:

9

示例代码1:【此方法遇到大数会运行超时】

from functools import reducedef sums(n):if n == 1:return 1else:return reduce(lambda x, y: x * y, range(1, n + 1)) * sums(n - 1)num = int(input('请输入一个n:'))
result = sums(num)
print(result)
res = 0
flag = True
while flag and result:if result % 10 == 0:result //= 10res += 1continueflag = False
print(res)

运行结果:

示例代码2:

def func(x):res, tmp = 0, 0for i in range(5, x+1):while i % 5 == 0:i //= 5tmp += 1res += tmpreturn resnum = int(input('请输入一个数n:'))
result = func(num)
print(result)

运行结果:

思路解析:

这是一道找规律的题目。表达式的结果中末尾出现的0,只与两个数有关,那就是2和5。但事实上,我们通常不考虑2,所以只与一个元素有关,那就是5。为什么不考虑2呢,因为只要阶乘元素中出现了5的倍数,那么必定可以找到相应的偶数因子与这个5配对。因此可以不客气的说,一个5就对应一个末尾的0。

这里我们先考虑对于单个元素 n 的阶乘结果末尾0的个数:

比如,11的阶乘,阶乘的元素中有5,10这两个关键性的数。至于元素5,可以随意和任意偶数配对,使得结果末尾有一个0,至于10,我们仅把他当做“5”看待,那么这个“5”也定能找到相应的偶数(偶数不必是阶乘中的元素,元素中的因子也可以)结合。那么末尾中又有一个0。因此11的阶乘结果,末尾有两个0。

但是如果我们简单地只考虑 n 中包含多少个5,那么是得不到正确答案的。因为有特殊的元素,这个元素仅看作一个“5”是不对的。比如:25,125,625…。25可以看做两个“5”,125可以看做3个“5”,以此类推。那么新的问题来了,怎么计算“5”的总个数?首先我们找出 n 对 5 的取整a1,再找 n 对 25 的取整 a2,再找 n 对 125 的取整 a3…然后将所有的a(i)累加即可。因为a1中计算5的取整时,也将25考虑在内了,因此计算25的取整时,尽管一个25的倍数可以看做两个“5”,由于之前已经计数过一次,所以只需要对当前计数一次就行。对于125以及625往后的取整,同理。

单个数的末尾0的计数已经搞清楚了,那么此题目的表达式是前 n 个元素阶乘的累乘。那就好办,遍历每个元素,对每个元素计数其中“5”的个数。累加之后就是答案。

求表达式 f(n)结果末尾0的个数相关推荐

  1. 小红书校招笔试编程题 求表达式 f(n)结果末尾0的个数

    时间限制:1秒 空间限制:32768K 输入一个自然数n,求表达式 f(n) = 1!2!3!.....n! 的结果末尾有几个连续的0? 输入描述: 自然数n 输出描述: f(n)末尾连续的0的个数 ...

  2. c语言 n阶阶乘尾0个数,计算n的阶乘(n!)末尾0的个数

    题目: 给定一个正整数n,请计算n的阶乘n!末尾所含有"0"的个数. 举例: 5!=120,其末尾所含有的"0"的个数为1: 10!= 3628800,其末尾所 ...

  3. 阶乘末尾0的个数(java)

    从输入中读取一个数n,求出n!中末尾0的个数. 输入格式: 输入有若干行.第一行上有一个整数m,指明接下来的数字的个数.然后是m行,每一行包含一个确定的正整数n,1<=n<=1000000 ...

  4. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论

    链接:https://www.nowcoder.com/acm/contest/135/C 来源:牛客网 题目描述 其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使 ...

  5. 求表达式 f(n)的结果

    输入一个自然数n,求表达式 f(n) = 1!*2!*3!*.....*n! 的结果? 示例代码: from functools import reducedef sums(n):if n == 1: ...

  6. 对一个正整数n,求出n!中末尾0的个数。

    对一个正整数n,求出n!中末尾0的个数. 输入 输入有若干行.每一行上有一个整数T,是测试数据组数,接着有T行,每一行包含一个确定的正整数n(n≤1000000000). 输出 对输入行中的每一个数据 ...

  7. java n%9==0_用C++实现求N!中末尾0的个数的方法详解

    题目描述: 输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2 输入描述: 输入为1行,n(1≤n≤1000) 输出描述: 输出一个整数 ...

  8. 求阶乘N!末尾0的个数

    POJ上有这个题目.http://poj.org/problem?id=1401.去掉一大堆没有用的信息,POJ的描述如下: For example, they defined the functio ...

  9. 求n的阶乘末尾0的个数

    输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2. 思路:末尾0的个数就是指这个数总共有几个10因子,而10又能表示成2和5的乘积.假 ...

最新文章

  1. 单片机c语言实现表格数据调用,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
  2. 2019谷歌学术指标出炉,影响因子何去何从?
  3. Form表单中的button导致页面刷新而无法进入Ajax请求回调函数
  4. 1、Flutter_初体验_创建第一个应用_AndroidStudio_windows
  5. 电脑会显示android,怎么在电脑上显示、操作安卓手机
  6. Lynn/ Online digital filters for biological signals: some fast designs for a small computer
  7. C/C++编程语言中指针(pointer)介绍
  8. 190328每日一句 When you forgive, you release.
  9. Centos7安装java运行环境
  10. 20本父母必读的亲子教育书籍
  11. java mifare_java – NTAG212 Mifare Ultralight与身份验证
  12. 研究性学习:APP的隐私问题
  13. jwt 的 token 被获取怎么办
  14. 高通骁龙800系列处理器规格型号及代表机型大全
  15. 医院医生护士都不愿说的医学小常识,我终于查齐了。留着以后自己学习。什么都有...
  16. 弹窗代码大全window.open
  17. Summer School Homework: C语言 订餐系统(总结)
  18. 计算机毕业设计ssm成都驰聘健身俱乐部管理系统so4b3系统+程序+源码+lw+远程部署
  19. 推荐20个优秀的网页色彩搭配实例
  20. layui导出excel表格

热门文章

  1. 急缺开源人才怎么办?来看看大厂和高校怎么解决
  2. 强化学习:10种真实的奖励与惩罚应用
  3. 达摩院实现自动驾驶核心技术突破,达摩院首次实现3D物体检测精度与速度的兼得
  4. 倒计时2天 | 专属技术人的盛会,为你而来!
  5. 倒计时1天,2018中国大数据技术大会报名通道即将关闭(附参会提醒)
  6. “AI赋能,驱动未来”—— 2018中国人工智能峰会(南京)圆满落幕
  7. 详解 | Dropout为何能防止过拟合?
  8. 小米和西工大联手,三篇论文被Interspeech接收
  9. AI一分钟 | 特朗普以国家安全为由否决博通收购高通;阿里发起时尚AI算法大赛
  10. 放弃MyBatis!我选择 JDBCTemplate!