N的阶乘末尾有多少个0

N的阶乘(N!)中的末尾有多少个0?

N的阶乘可以分解为: 2的X次方,3的Y次方,4的5次Z方,.....的成绩。由于10 = 2 * 5,所以M只能和X和Z有关,每一对2和5相乘就可以得到一个10,于是M = MIN(X,Z),不难看出X大于Z,因为被2整除的频率比被5整除的频率高的多。

要计算Z,最直接的方法就是求出N的阶乘的所有因式(1,2,3,...,N)分解中5的指数。然后求和

 1 int fun1(int n)
 2 {
 3     int num = 0;
 4     int i,j;
 5     
 6     for (i = 5;i <= n;i += 5)
 7     {
 8         j = i;
 9         while (j % 5 == 0)
10         {
11             num++;
12             j /= 5;
13         }
14     }
15     
16     return num;
17 }

 5是+1,10里面有1一个5,15=3*5有一个5……25是5*5有两个5

posted on 2016-08-23 23:48  已停更  阅读(1755)  评论(0编辑  收藏  举报