nyoj84 阶乘的0
Posted slgkaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章