您的位置:首页 > 其它

给定一个整数N,那么N的阶乘N!末尾有多少个0呢?

2017-07-22 22:30 232 查看
看到这道题的第一反应是直接求阶乘,思考方案的过程中发现不可行,当N的值足够大时,N!将会溢出。

因此考虑,如果N!= K×10M,且K不能被10整除,那么N!末尾有M个0。再考虑对N!进行质因数分解,N!=(2x)×(3y)×(5z)…,由于10 = 2×5,所以M只跟X和Z相关,每一对2和5相乘可以得到一个10,于是M = min(X, Z)。不难看出X大于等于Z,因为能被2整除的数出现的频率比能被5整除的数高得多,所以把公式简化为M = Z。

代码如下:

int GetZeroCount(int x)
{
int count = 0;
int i, j;
for (i = 0; i <= x ; i++)
{
j = i;
while (j % 5 == 0)
{
count++;
j = j / 5;
}
}
return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐