2.2阶乘中末尾0的个数

#include<iostream>
using namespace std;
int count(int N)
{
	if(N==0)
		return 0;
	int num=0;
	for(int i=1;i<=N;++i)
	{
		int j=i;
		while(j%5==0)
		{
			num++;
			j/=5;
		}

	}
	return num;
}
int aa(int N)
{
	int sum=0;
	while(N)
	{sum+=N/5;
	N/=5;}
	return sum;
}
int main()
{
	cout<<count(100)<<endl;
	system("pause");
	return 0;
}

时间: 2024-07-29 13:48:25

2.2阶乘中末尾0的个数的相关文章

算法-计算阶乘n!末尾0的个数

算法逻辑转载自计算阶乘n!末尾0的个数: 问题描述    给定参数n(n为正整数),请计算n的阶乘n!末尾所含有"0"的个数.    例如,5!=120,其末尾所含有的"0"的个数为1:10!= 3628800,其末尾所含有的"0"的个数为2:20!= 2432902008176640000,其末尾所含有的"0"的个数为4. 计算公式    这里先给出其计算公式,后面给出推导过程.    令f(x)表示正整数x末尾所含有的&q

求N的阶乘N!中末尾0的个数

有道问题是这样的:给定一个正整数N,那么N的阶乘N!末尾中有多少个0呢?例如:N=10,N!=3628800,则N!的末尾有两个0: 直接上干货,算法思想如下: 对于任意一个正整数N!,都可以化为N!= (2^X)  * (3^Y)* (5^Z)......的形式,要求得末尾0的个数只需求得min(X, Z)即可, 由于是求N!,则X >= Z; 即公约数5出现的频率小于等于2出现的频率,即Z=min(X, Z),即出现0的个数等于公约数5出现的次数: 源码如下: 方法一: #include <

计算阶乘n!末尾0的个数

一.问题描述 给定一个正整数n,请计算n的阶乘n!末尾所含有“0”的个数.例如: 5!=120,其末尾所含有的“0”的个数为1: 10!= 3628800,其末尾所含有的“0”的个数为2: 20!= 2432902008176640000,其末尾所含有的“0”的个数为4. 二.算法分析 此类问题很显然属于数学问题,一定要找到其中的本质规律才能得到正确的数学模型. 两个大数字相乘,都可以拆分成多个质数相乘,而质数相乘结果尾数为0的,只可能是2*5.如果想到了这一点,那么就可以进一步想到:两个数相乘

N!结果中末尾0的个数 2.2

主要是看N!结果中2的个数和5的个数,多的那个个数即是末尾0的个数 ? ? ? ? 计算Z有两种方法 ? ? 一种是对每个n都去看有多少个5的因子 ? ? 一种是隔5个增加一个5的因子,隔25个再在之前的基础上增加一个5的因子 ? ? 两种方法差不多 ? ? 第二种,循环少 ? ? package numOfZeroFactorialN_2_2; ? ? public class NumOfZeroFactorialN_2_2 { ? ? static int numOfZeros(int n)

笔试算法题(33):烙饼排序问题 &amp; N!阶乘十进制末尾0的个数二进制最低1的位置

出题:不同大小烙饼的排序问题:对于N块大小不一的烙饼,上下累在一起,由于一只手托着所有的饼,所以仅有一只手可以翻转饼(假设手足够大可以翻转任意块数的 饼),规定所有的大饼都出现在小饼的下面则说明已经排序,则最少需要翻转几次,才能达到大小有序的结果(改变饼的顺序只能整体翻转,不能相邻交换): 分析: 假设饼大小编号为1,--,N,1就是最小的饼,N就是最大的饼,最大的N饼翻转到最下面之前,一定需要达到最上面,所以首先需要寻找N饼所在的位置,翻 转到最上面,然后翻转所有的饼,这样N饼就可以就位: 然

N阶乘结果末尾0的个数

N阶乘的结果sum,对这个结果进行质因数分解,sum=2x * 3y * 5z * 7w....,末尾为0是由2*5=10导致的.而被2整除的数比被5整除的数多很多,因此2*5的出现的次数应该是质因数5出现的次数Z. int NumofZero(int N) { int result=0; for(int i=5;i<=N;i+=5) { int temp=i; while(temp%5==0) { result++; temp/=5; } } }

N的阶乘末尾0的个数和其二进制表示中最后位1的位置

问题一解法: 我们知道求N的阶乘结果末尾0的个数也就是说我们在从1做到N的乘法的时候里面产生了多少个10, 我们可以这样分解,也就是将从0到N的数分解成因式,再将这些因式相乘,那么里面有多少个10呢? 其实我们只要算里面有多少个5就可以了? 因为在这些分解后的因子中,能产生10的可只有5和2相乘了,由于2的个数是大于5的个数的,因此 我们只要算5的个数就可以了.那么这个题目就是算这些从1到N的数字分解成因子后,这些因子里面 5的个数. Python代码 def factorialnumberof

poj1401--Factorial--阶乘末尾0的个数

Description 求出n!的末尾有多少个0(连续的). 每组测试点有t个测试数据,输入格式为第一行一个t,后面2~t+1行每行一个n,输出其结果. Sample Input 6 3 60 100 1024 23456 8735373 Sample Output 0 14 24 253 5861 2183837 题解: 求一个数阶乘的末尾0的个数. 10=2*5,显然2的个数总比5多, 即转化为,求阶乘分解以后有几个5. #include<iostream> #include<cma

计算n的阶乘(n!)末尾0的个数

题目: 给定一个正整数n,请计算n的阶乘n!末尾所含有“0”的个数. 举例: 5!=120,其末尾所含有的“0”的个数为1: 10!= 3628800,其末尾所含有的“0”的个数为2: 20!= 2432902008176640000,其末尾所含有的“0”的个数为4 解题思路: 两个大数字相乘,都可以拆分成多个质数相乘,而质数相乘结果尾数为0的,只可能是2*5.如果想到了这一点,那么就可以进一步想到:两个数相乘尾数0的个数其实就是依赖于2和5因子的个数.又因为每两个连续数字就会有一个因子2,个数