编写程序计算1000!的某尾有多少个0
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i, k, m;
k = 0;
for (i = 5; i <= 1000; i = i + 5)
{
m = i;
while (m % 5 == 0) // 含有一个5因子
{
k++;
m = m / 5;
}
}
printf("%d", k);
return 0;
}
结尾的每一个0都表示有一个因数10存在。
10可以分解为2 × 5,因此只有质数2和5相乘能产生0,别的任何两个质数相乘都不能产生0,而且2,5相乘只产生一个0。
分解后的整个因数式中有多少对(2, 5),结果中就有多少个0,而分解的结果中,2的个数显然是多于5的,因此,考虑有多少个5即可。
所以遍历1~1000,分别访问5/10/15....,求出每个数会产生多少个5因子即可。