回复 9楼 beyondyf
大哥,不要介意,算法原理我明白,就是对n!中的n个数的乘积求含5的个数之和,但怎么求一个数含多少个5呢???这里我不明白。。。望指导,谢谢。。
首先要分析末尾零的成因。任何数都有一个唯一质因数分解式,在这些质数相乘的过程中,能形成10的整数倍的只有2 * 5。
而对于阶乘这样的序列来说,其中因子2的含量远大于因子5的含量,所以只需要统计其中因子5的数量就可以得出末尾0的数量。
就单个数而言,能被5整除一次,自然就包含一个因子5。那么整除的次数就是因子5的次数。
而对于阶乘这样的连续数列来说,每5个数就会出现一个能被5整除的数。将这些数提取出来并都除5后形成一个新的1-K的序列,并具有同样的性质。
已经分析到这份上了,直接给你看代码好了。希望你真明白这是怎么回事了。
程序代码:
#include<stdio.h> int main() { int a, n; scanf("%d", &n); for(a = 0; n /= 5; a += n); printf("%d\n", a); return 0; }