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