`

java算法----求解N的阶乘的结果中从个位开始连续的0的个数

    博客分类:
  • java
 
阅读更多
package com.zhonghaiwangluokeji.interview;

/**
 * 求N!的阶乘的结果的末尾有多少个连续的0
 * @author yangjianzhou
 * 实现原理:这个阶乘分解因式后有多少个5,例如25=5*5.
 * 任何一个偶数与5的乘积的结果个位一定为0
 * 
 */
public class Problem2 {

	public static void main(String[] args) {
		System.out.println(countZeros(1000));
		System.out.println(zeroCount(1000));
	}
	/**
	 * 网上例子
	 * @param n
	 * @return
	 */
	static int zeroCount ( int n) {  
		int counter = 0;  
		for( int i = 5,m; i <= n; i += 5) {  
			m = i;  
			while ( m % 5 == 0) {  
				counter++;  
				m /= 5;  
			}  
		}  
		return counter;  
	}  

	/**
	 * 自己实现
	 * @param n
	 * @return
	 */
	public static int countZeros(int n){

		int start = 5;
		int count = 0;
		int temp;

		while(start<=n){
			temp = start;
			while(temp%5==0){
				temp = temp/5;
				count ++;
			}
			start = start+5;
		}
		return count;
	}
}



运算结果:
249
249
分享到:
评论

相关推荐

    输入一个自然数n,求 ,同时统计结果中有多少个0。

    标题中的“输入一个自然数n,求 ,同时统计结果中有多少个0。”是一个关于计算阶乘(Factorial)的问题,并且需要我们同时计算阶乘结果中0的数量。在这个问题中,"n!"代表n的阶乘,即1×2×3×...×n。 阶乘是数学...

    编程算法练习--没事的时候练练

    - **描述**:斐波那契数列是一系列数字,其中每个数字是前两个数字的和,通常从1和1开始。 - **实现思路**: - 使用循环或递归方法来生成数列。 - 循环方法:初始化前两个数字为1,然后通过循环计算后续数字。 - ...

    ACM/ICPC算法大全(c语言)

    - 组合数是指从n个不同元素中选取r个元素的组合数,本节介绍了其计算方法。 - **最大1矩阵** - 介绍了如何求解最大1矩阵问题。 - **约瑟夫环问题(数学方法)** - 约瑟夫环问题是一种经典的数学问题,本节介绍...

    用C语言实现n!最后一位非零数字的算法与程序分析.pdf

    最后一位非零数字的算法与程序分析》这篇文章主要探讨了如何在C语言环境下求解n阶乘(n!)最后一位非零数字的问题。该问题的关键在于有效地处理阶乘过程中产生的零,以避免它们占据计算资源并影响计算速度。 文章...

    数据结构与算法题解

    - 从链表末端删除第N个节点。 - **LinkedListCycle** - 检测链表中是否有环。 - **LinkedListCycleII** - 环的起点。 - **ReverseLinkedList** - 反转链表。 - **ReverseLinkedListII** - 反转链表的一部分。 -...

    实验指导书1-对算法运行时间的认识.pdf

    2. 计算 1 到 n 中素数的个数。方法 1 使用暴力枚举,从 2 到 x-1 验证每个数是否能整除 x,时间复杂度为 O(n^1.5)。方法 2 利用了平方根定理,只需检查到 sqrt(x) 即可,时间复杂度降低为 O(n^0.5)。实验中比较两种...

    Java练习题,实用于Java大部分人群

    数列从0和1开始,后续每一项都是前两项之和。 - **实现方法**: - 使用循环或递归来计算数列中的值。 - 通过设置初始值0和1,然后不断累加得到新的数值。 #### 2. 素数判断 - **知识点**:素数是只能被1和它本身...

    ACM算法整合

    - 计算组合数C(N,R),即从N个不同元素中选取R个元素的组合数。 - **最大1矩阵** - 寻找一个矩阵中最大大小的全为1的子矩阵。 - **约瑟夫环问题(数学方法)** - 约瑟夫问题是一种经典的数学问题,涉及按特定规则...

    C++数学与算法系列之排列和组合

    可推导出从 n 个数字中选择 m 个数字的排列个数的公式:从推论可知,求 A(n,m)的排列个数可以通过乘法原理求解:计算排列的个数,先确定高位的可能个数,再逐一确认次高位可能个数,一直到最低位的可能个数……...

    algorithm-ebook_zh-hans

    - **整数操作**:包括数字的反转、求解阶乘尾数的个数、寻找数组中重复的数字等。 - **二分搜索**:在有序数组中寻找元素的索引,以及寻找旋转数组中的元素。 - **矩阵搜索**:在二维矩阵中进行搜索。 - **快速幂...

    VB计算机等级考试常用算法.pdf

    这些算法涵盖了数值计算、序列求和、素数检测和阶乘等多个方面。以下是基于提供的部分内容的详细解释: 1. **交换变量**:交换两个变量a和b的值,通常有两种方法: - 方法一:中间变量法,即创建第三个变量c,将a...

    算法设计及实验报告.doc

    - 一般形式:`T(n) = a * T(n/b) + f(n)`,其中`a`代表每个子问题的个数,`b`代表每个子问题相对于原问题规模的比例,`f(n)`代表分割和合并子问题所需的工作量。 - **特殊情况**: - 当`f(n) = O(n^c)`且`c (a)`时...

    ACM编程题模板和各种经典算法数据结构实现代码

    - 组合数C(N,R)表示从N个不同元素中取出R个元素的组合数。 14. **最大1矩阵** - 最大1矩阵问题是指在一个由0和1组成的矩阵中寻找最大的全1子矩阵。 15. **约瑟夫环问题** - 约瑟夫环问题是一个经典的组合问题...

    ACM算法模板2 算法整理

    14. **组合 C(m,n)**:组合是组合数学中的基本概念,表示从m个不同元素中不重复地选取n个元素的方法数。可以使用递推公式C(m, n) = C(m-1, n-1) + C(m-1, n)来计算,或者直接使用阶乘公式C(m, n) = m! / (n!(m-n)!)....

    foreverzeus大木板 acm模板

    - **阶乘0的个数**: 统计\(n!\)尾部0的数量。 - **计算阶乘右边第一非0的数**: 需要计算\(n!\)的最后一位非零数字。 - **求\(n!\)的位数**: 利用斯特林公式近似计算。 - **判断数值\(m\)是否可以整除\(n!\)**: 通过...

    C语言趣味算法

    5. 阶乘尾数零的个数:通过因式分解质数的方式确定一个数阶乘后末尾零的个数,常用于优化计算大数阶乘的复杂度。 6. 杨辉三角形:一个经典的数字排列图形,通过递归或者迭代算法生成,是组合数学中的一个重要概念。...

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

    - **定义:** 如果一个正整数 \( n \) 能够被另一个正整数 \( d \) 整除(即 \( n \mod d = 0 \)),则称 \( d \) 是 \( n \) 的约数。 - **性质:** 对于任何正整数 \( n \),1 和 \( n \) 本身都是 \( n \) 的约数...

    组合三高中数学选修计数原理PPT课件.pptx

    从 n 个不同元素中取出 m 个元素的所有组合的个数,叫做从 n 个不同元素中取出 m 个元素的组合数,用符号 C(n,m) 表示。 组合数公式:C(n,m) = n! / (m!(n-m)!),其中 n! 表示 n 的阶乘,即 n*(n-1)*(n-2)*...*2*1...

Global site tag (gtag.js) - Google Analytics