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的全排列。解决全排列问题可以使用递归算法或非递归算法。递归算法通常基于分治法的思想,通过逐个交换字符来生成新的排列,保证...
= 10 × 8 × 6 × 4 × 2 = 3840,末尾有 1 个零。 - 输入 2:5 - 输出 2:1 0 - 解释:5! = 120,末尾有 1 个零;5!! = 5 × 3 × 1 = 15,末尾没有零。 #### 试题3:序列(sequence) **背景知识:** - **数组...
在面试中,除了正确实现算法外,面试官还可能关注以下几个方面: 1. 时间复杂度和空间复杂度分析:此算法的时间复杂度为O(N),因为每个节点最多被访问两次。空间复杂度为O(1),因为我们只使用了常数级别的额外空间。...
在给出的代码中,广义表的结点类型定义为GLNode,它包含以下几个部分: 1. `int tag`:这个字段用于标识当前结点是原子(值为0)还是子表(值为非0)。 2. `union`:这个联合体包含了两种可能的数据类型,`ElemType...
15. **偶数求和**:偶数求和形成的序列有一个确定的公式,通过公式可以计算任意n个偶数的和,并验证对于n=6的情况。 这些问题体现了数学中的规律探索、逻辑推理和计算能力,是数学教育中的基础练习。解决这些问题...
2. 使用一个变量`n`来记录要删除的节点是倒数第几个。 3. 开始遍历链表,每次循环,快指针向前移动两个节点,慢指针向前移动一个节点。即`fast.next = fast.next.next`,`slow = slow.next`。 4. 当快指针到达链表...
这真的非常重要,而且影响着下面的其他几个技巧。当你创建一个字符串时,其本质就是一个字节的数组。这意味着你可以像访问数组一样的访问单独的某个字节。例如,下面的代码逐个打印字符串中的每个字节以及对应字节...
【408代码汇总1】主要涉及了几个与数据结构和算法相关的问题,具体包括链表操作、数组的循环移位以及寻找序列的中位数。以下是对这些知识点的详细解释: 1. **查找链表中倒数第k个节点**: 在这个问题中,我们使用...
这个算法的时间复杂度是O(max(m, n)),其中m和n分别是两个输入链表的长度。空间复杂度是O(max(m, n)),因为我们需要创建一个新的链表来存储结果。 通过以上步骤,我们可以有效地解决这个挑战性编程题,将两个反序...
根据给定文件的信息,我们可以归纳出以下几个C语言相关的知识点: ### 一、字符串处理 #### 1. 删除字符串前导的星号(*) - **功能描述**:该函数用于删除字符串开头的所有星号(*),保留中间和结尾的星号。 - ...
本作业涉及了几个关键知识点,包括进制转换、递归算法以及循环队列的操作。 首先,进制整数转换是计算机科学的基础。在3.12部分,任务是将十进制整数N转换为基数为B的B进制数。实现这个功能的代码使用了栈这一数据...
接着,介绍了几个在统计中常用的概率分布: 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>0`。 - 对于文法`S...
【知识点详解】 1. **二维数组操作** ...以上是针对C语言程序设计题目的几个核心知识点,涵盖了数组操作、数值计算、整数筛选和字符串处理等基本编程技巧。掌握这些知识点对于理解和编写C语言程序至关重要。
根据提供的文件信息,我们可以总结出以下几个C语言编程相关的知识点: ### 1. 输出图形 **知识点概述:** 在本节中,我们通过一个简单的例子学习如何在C语言中使用`printf`函数输出特定的字符串模式。这对于理解...
数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 解题思路:要求时间复杂度 O(N),空间复杂度 O(1)。因此不能使用排序的方法,也不能使用额外的...
以下是对几个关键知识点的详细解析: ### 1. 回文串检测 在代码填空中,题目要求判断一个字符串是否为回文串。回文串指的是正读反读都一样的字符串,例如"abccba"或"abcba"。代码中使用了一个循环,遍历字符串的...
收敛序列有几个重要的性质和定理。比如,收敛序列的极限是唯一的(定理1),如果有三个序列满足夹逼条件,那么这三个序列要么同时收敛要么同时不收敛(夹逼原理,定理2)。另外,对于序列的三种陈述:序列收敛、序列...
以上是对计算机二级C语言考试题库中几个典型题目的解析。这些题目涵盖了字符串处理的基础知识,如字符串的遍历、复制、修改等操作,对于初学者来说是非常好的练习材料。通过这些练习,可以帮助考生更好地掌握C语言中...