题目:给定一个整数N,那么N的阶乘N!末尾有多少个0呢?
例如:N=10,N!=3 628 800,N!的末尾有两个0。
N!=1 * 2 * 3 * 4 * 5 * 6 * ······ * N
N! =(2^X)*(3^Y)*(5^Z) * ······
又因为是求0的个数,2*5=10刚好可以产生一个0,所以题目可以转换为有多少个2*5,所以取min(X,Z)即Z,求出Z,也就求出末尾0的个数。
int fun(int num)
{
int count = 0;
for (int i = 1; i <= num; i++)
{
int tmp = i;
while (0 == tmp % 5)
{
tmp /= 5;
count++;
}
}
return count;
}
void TestFactorial()
{
size_t n = fun(10);
cout << n << endl;
}