题目详情:给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。
题目分析:看到题第一想法是将N的阶乘求出来然后取计算,但是再一想又会出现数据溢出的问题。
所以就想到了另外一种办法。
因为:N! = 1*2*3*4*5*...........*N
所以我们可以采用分解质因数来解决,则可得:
N!=2^x*3^y*5^z.......
而我们则很明显的发现,2*5会出现一个0,所以我们得找到min(x,z),但是我们都知道被2整除的数肯定比5多,所以我们 就可以将该问题转换为求z;这样这个问题就变得简单许多。因此,直接上代码。
int countFactorialZero(int num) //- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。
{
int count = 0;
for (int i = 1; i < num; i++)
{
int j = i;
while (j % 5 == 0)
{
count++;
j /= 5;
}
}
return count;
}