/*
*问题:正整数N的阶乘是N!,求N!的结尾0的个数
*思路:不能先求N!的值,再求N!的结尾0的个数,因为N!可能非常大。
N!的结尾0的个数 => N!中因数10的个数 => 10=2x5,因数2的个数总是多于5 => N!中质因数5的个数
*解法1:遍历1~N,累计每个数中因数5的个数
*解法2:N!中质因数5的个数 = N/5 + N/(5x5) + N/(5x5x5) + ...
*/
#include <stdio.h>
int count1(int N)
{
int num = 0, i, n;
for (i = 1; i <= N; i++)
{
n = i;
while (n % 5 == 0)
{
num++;
n /= 5;
}
}
return num;
}
int count2(int N)
{
int num = 0;
while (N)
{
num += N/5;
N /= 5;
}
return num;
}
int main(void)
{
printf("%d\n", count1(10));
printf("%d\n", count2(10));
return 0;
}
N!结尾有多少个0
最新推荐文章于 2020-07-12 10:45:09 发布