码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj84 阶乘的0

时间:2017-07-22 14:26:16      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:track   color   article   center   难度   new   个数   有一个   problem   

阶乘的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

标签:track   color   article   center   难度   new   个数   有一个   problem   

原文地址:http://www.cnblogs.com/slgkaifa/p/7221137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!