方法:求N! 中质因子5的个数,即能被5整除多少次。
说明:相当于求10的个数==5*2的个数 由于5的个数<=2的个数,所以只要求5的个数。
N!中5的个数==[N/5]+[N/5^2]+[N/5^3]+...
//太大的话会溢出的,只能算12!以下。
unsigned int factorial(unsigned int n)
{
if(n==0 || n==1) return 1;
else
return n*factorial(n-1);
}
//求N!的最后有几个0,如10!=3628800,则有2个0
//相当于求2*5的个数,因为5的个数《=2的个数,所以==5的个数
//方法一:对1-n的每个数遍历一次,计算5的个数
unsigned int numOf0InFactor_N(unsigned int n)
{
unsigned int count=0,k;
while(n>1)
{
k=n;
while (k)
{
if (k % 5 == 0) ++count;
k /= 5;
}
--n;
}
return count;
}
//方法二:N!中5的个数==[N/5]+[N/5^2]+[N/5^3]+...
unsigned int numOf0InFactor_N2(unsigned int n)
{
unsigned int count=0;
while(n)
{
n/=5;
count+=n;
}
return count;
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int N=10;
printf("%d\n",factorial(N));
printf("%d\n",numOf0InFactor_N(N));
printf("%d\n",numOf0InFactor_N2(N));
return 0;
}