首页 > 代码库 > nyoj84 阶乘的0

nyoj84 阶乘的0

阶乘的0

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
计算n!的十进制表示最后有多少个0
输入
第一行输入一个整数N表示测试数据的组数(1<=N<=100)
每组测试数据占一行,都只有一个整数M(0<=M<=10000000)
输出
输出M的阶乘的十进制表示中最后0的个数
比如5!=120则最后的0的个数为1
样例输入
6
3
60
100
1024
23456
8735373
样例输出
0
14
24
253
5861
2183837

解题思路:因为在质数中,只有2和5相乘才会在尾部出现一个"0",那么只要将m分解质因数,然后统计2和5的个数,其中较小的一个就是答案。
进一步来说,m分解质因数之后,2的个数绝对比5多,
那么问题进一步简化,只要统计出所有的质因数中有多少个5即可。

例如:

1-->100中5的倍数

有 5 ,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100.

   20 个5

但是除以5后还有可分解为5的

                        5                       10                     15                      20

此时有4个5

就是说1-->100共有24个5;即所求的0的个数

代码运用递归求5的个数:如下:

#include <stdio.h>
int Count=0;//计数
int factorial(int m)
{
	if(m==0) 
		return Count;
	else
	{
		Count+=m/5;
		return factorial(m/5);
	}
}
int main()
{
	int m;
	int n;
	scanf("%d",&n);
	while(n--)
	{
		Count=0;
		scanf("%d",&m);
		printf("%d\n",factorial(m));//递归操作实现
	}
	return 0;
}


nyoj84 阶乘的0