nyoj84 阶乘的0

来源:互联网 发布:ubuntu安装桌面教程 编辑:程序博客网 时间:2024/05/02 04:48

阶乘的0

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

解题思路:因为在质数中,只有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;}


0 0
原创粉丝点击