`
hwy1782
  • 浏览: 153319 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

求n!尾部有几个零

阅读更多

n! =  n * (n-1) * (n-2) *... 1;求得到的结果中零的个数

 

分析:如 10 ! = 1*2*3*4*5*6*7*8*9*10 = (2*5)*10*1*3*4*6*7*8*9

 

(2*5)*10 的结果中会有零,所以阶乘中零的个数,只需要计算其中这些组合的个数。注意到10 = 2*5,所以归根到底还

 

是要求计算这个序列中2*5组合的数目。 注意到任意一个偶数都可以拆分成2*n的形式,所以这里只有考虑能拆分得到5的数

 

的数目即可。

 

10 = 2*5

 

15 = 3*5

 

 25 = 5*5 (此时为特殊情况,能拆分成两个5,要细分)

 

 

java代码如下

/** 
 * @author hwy1782@gmail.com 
 * @creation date 2010-9-23 上午09:29:12 
 * 
 * 找出 n! 末尾零的个数
 * 
 * 
 */

public class FindZeroNumber {
	
	public static int findNumber(int n){
		int numberOfFive = findFiveCount(n);
		int result = 0;
		result += n /5;
		while(numberOfFive > 1){
			result += n/(Math.pow(5, numberOfFive));
			numberOfFive--;
		}
		return result;
	}
	
	// 若 5^m <=  n ,求最大m的值,m = log(n)/log(5)
	private static int findFiveCount(int n) {
		return (int)(Math.log(n)/Math.log(5));
	}
	
	public static void main(String[] args) {
		System.out.println(findNumber(1000));
	}
	
}
 
分享到:
评论

相关推荐

    数据结构和算法:字符串

    另一个字符串处理的经典问题是字符串的全排列,即给定字符串S[0…N-1],设计算法枚举S的全排列。解决全排列问题可以使用递归算法或非递归算法。递归算法通常基于分治法的思想,通过逐个交换字符来生成新的排列,保证...

    2019 年海淀区青少年程序设计挑战活动复赛 小学组 C++语言试题(只有题目,无相关测试文件)

    = 10 × 8 × 6 × 4 × 2 = 3840,末尾有 1 个零。 - 输入 2:5 - 输出 2:1 0 - 解释:5! = 120,末尾有 1 个零;5!! = 5 × 3 × 1 = 15,末尾没有零。 #### 试题3:序列(sequence) **背景知识:** - **数组...

    java面试-leetcode面试题解之第19题删除链表的倒数第N个结点.zip

    在面试中,除了正确实现算法外,面试官还可能关注以下几个方面: 1. 时间复杂度和空间复杂度分析:此算法的时间复杂度为O(N),因为每个节点最多被访问两次。空间复杂度为O(1),因为我们只使用了常数级别的额外空间。...

    求一个广义表中原子的个数

    在给出的代码中,广义表的结点类型定义为GLNode,它包含以下几个部分: 1. `int tag`:这个字段用于标识当前结点是原子(值为0)还是子表(值为非0)。 2. `union`:这个联合体包含了两种可能的数据类型,`ElemType...

    探索规律(基础)巩固练习.doc

    15. **偶数求和**:偶数求和形成的序列有一个确定的公式,通过公式可以计算任意n个偶数的和,并验证对于n=6的情况。 这些问题体现了数学中的规律探索、逻辑推理和计算能力,是数学教育中的基础练习。解决这些问题...

    js代码-5.1 删除链表倒数第n个节点 快慢指针

    2. 使用一个变量`n`来记录要删除的节点是倒数第几个。 3. 开始遍历链表,每次循环,快指针向前移动两个节点,慢指针向前移动一个节点。即`fast.next = fast.next.next`,`slow = slow.next`。 4. 当快指针到达链表...

    Go语言使用字符串的几个技巧分享

    这真的非常重要,而且影响着下面的其他几个技巧。当你创建一个字符串时,其本质就是一个字节的数组。这意味着你可以像访问数组一样的访问单独的某个字节。例如,下面的代码逐个打印字符串中的每个字节以及对应字节...

    408代码汇总1

    【408代码汇总1】主要涉及了几个与数据结构和算法相关的问题,具体包括链表操作、数组的循环移位以及寻找序列的中位数。以下是对这些知识点的详细解释: 1. **查找链表中倒数第k个节点**: 在这个问题中,我们使用...

    两个数相加

    这个算法的时间复杂度是O(max(m, n)),其中m和n分别是两个输入链表的长度。空间复杂度是O(max(m, n)),因为我们需要创建一个新的链表来存储结果。 通过以上步骤,我们可以有效地解决这个挑战性编程题,将两个反序...

    全国计算机二级c语言上机*和字母题汇编

    根据给定文件的信息,我们可以归纳出以下几个C语言相关的知识点: ### 一、字符串处理 #### 1. 删除字符串前导的星号(*) - **功能描述**:该函数用于删除字符串开头的所有星号(*),保留中间和结尾的星号。 - ...

    数据结构作业 3.2 3.3 3.12 3.14 3.22 3.231

    本作业涉及了几个关键知识点,包括进制转换、递归算法以及循环队列的操作。 首先,进制整数转换是计算机科学的基础。在3.12部分,任务是将十进制整数N转换为基数为B的B进制数。实现这个功能的代码使用了栈这一数据...

    MATLAB第讲数据统计分析PPT教案学习.pptx

    接着,介绍了几个在统计中常用的概率分布: 1. 正态分布,也称为高斯分布,其概率密度函数和分布函数与均值μ和方差σ^2相关。标准正态分布具有均值0和方差1,是其他正态分布的基础。 2. χ²(卡方)分布,当n个...

    《编译原理》西北工业大学第三版课后答案

    - 对于文法`S→1AS→B→1AA→CB→B0B→CC→ε`,构成的语言集为`L(G)={1^p1^n0^n|p≥1,n≥0}∪{1^n0^n0^q|q≥1,n≥0}`,特点是具有`1^p1^n0^n`或`1^n0^n0^q`的形式,且`1`和`0`的数量关系为`n+m&gt;0`。 - 对于文法`S...

    2023年二级C语言程序设计题.doc

    【知识点详解】 1. **二维数组操作** ...以上是针对C语言程序设计题目的几个核心知识点,涵盖了数组操作、数值计算、整数筛选和字符串处理等基本编程技巧。掌握这些知识点对于理解和编写C语言程序至关重要。

    C语言编程实验.docx

    根据提供的文件信息,我们可以总结出以下几个C语言编程相关的知识点: ### 1. 输出图形 **知识点概述:** 在本节中,我们通过一个简单的例子学习如何在C语言中使用`printf`函数输出特定的字符串模式。这对于理解...

    剑指 offer 题解.pdf

    数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 解题思路:要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的...

    2011国信蓝点杯软件大赛模拟题c高职组(答案)

    以下是对几个关键知识点的详细解析: ### 1. 回文串检测 在代码填空中,题目要求判断一个字符串是否为回文串。回文串指的是正读反读都一样的字符串,例如"abccba"或"abcba"。代码中使用了一个循环,遍历字符串的...

    数学分析知识点总结(定积分).pdf

    收敛序列有几个重要的性质和定理。比如,收敛序列的极限是唯一的(定理1),如果有三个序列满足夹逼条件,那么这三个序列要么同时收敛要么同时不收敛(夹逼原理,定理2)。另外,对于序列的三种陈述:序列收敛、序列...

    计算机二级考试题库

    以上是对计算机二级C语言考试题库中几个典型题目的解析。这些题目涵盖了字符串处理的基础知识,如字符串的遍历、复制、修改等操作,对于初学者来说是非常好的练习材料。通过这些练习,可以帮助考生更好地掌握C语言中...

Global site tag (gtag.js) - Google Analytics