有一天有个同学问我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 220!= 2432902008176640000 4 于是得出了如下结论:
当0 < n < 5时,f(n!) = 0; 当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整) 程序如下:其实只要把问题想得透彻,一切就OK!
- #include <iostream>
- using namespace std;
- typedef int INT;
- typedef unsigned int UINT;
- void main( )
- {
- INT Fac(UINT n);
- INT n;
- cin>>n;
- cout<<Fac(n)<<endl;
- }
- /*********************************************
- Function: // Fac
- Description: // 求n的阶乘0的个数
- Input: // 输入参数n,n是一个正整数
- Output: 无
- Return: // 函数返回一个整数 表示0的个数
- *********************************************/
- INT Fac(UINT n)
- {
- if (0 < n && n < 5)
- {
- return 0; //递归退出条件
- }
- else
- {
- return (n/5 + Fac(n/5));
- }
- }