正整数n的阶乘中0的个数

来源:互联网 发布:c语言输出整数部分 编辑:程序博客网 时间:2024/04/29 05:01

 有一天有个同学问我100!后有几个0

刚开始我就想末尾是0或者5就能产生一个0

1~100  有10 20 30 ~100   一共 11 个0

1~100  有5 15 25 35 45 55~ 95  一共有11个5

而25 75能产生2个0    故             2个0

一共24 个0

然后理清自己的思路 发现有一种更好的想法

                                                               0的个数

5!=120 1

10!= 3628800                            2
20!= 2432902008176640000    4于是得出了如下结论:
 当0 < n < 5时,f(n!) = 0;  当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)程序如下:  
Code:
  1. #include <iostream>  
  2. using namespace std;  
  3. typedef int INT;  
  4. typedef unsigned int UINT;  
  5. void main( )  
  6. {  
  7.     INT Fac(UINT n);  
  8.     INT n;  
  9.     cin>>n;  
  10.     cout<<Fac(n)<<endl;  
  11. }  
  12. /********************************************* 
  13. Function: // Fac 
  14. Description: // 求n的阶乘0的个数 
  15. Input: // 输入参数n,n是一个正整数 
  16. Output: 无 
  17. Return: // 函数返回一个整数   表示0的个数 
  18. *********************************************/  
  19.   
  20. INT Fac(UINT n)  
  21. {  
  22.     if (0 < n && n < 5)  
  23.     {  
  24.         return 0;          //递归退出条件  
  25.     }  
  26.     else  
  27.     {  
  28.         return (n/5 + Fac(n/5));  
  29.     }  
  30. }  
其实只要把问题想得透彻,一切就OK!