给定一个整数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。
代码如下:
因此考虑,如果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; }
相关文章推荐
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。
- 编程之美 给定一个整数N,那么N的阶乘N!末尾有多少个0?
- 求0个数--给定一个整数N,那么N的阶乘N!末尾有多少个0呢?
- 给定一个整数N,那么N的阶乘N!末尾有多少个0
- 给定一个整数N,那么N的阶乘N!末尾有多少个零呢?
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3628800,N!的末尾有两个0。
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?求N!的二进制表示中最低位1的位置。
- 实现一颗二叉树的层序遍历/给定一个整数N,那么N的阶乘N!末尾有多少个0呢
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。
- 给定一个整数N,那么N的阶乘N!末尾有多少个0
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢
- 给定一个整数N,那么N的阶乘N!末尾有多少个零呢?
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。
- PKU1401:给定一个整数N,那么N的阶乘N!末尾有多少个0。
- 给定一个整数N,那么N的阶乘N!末尾有多少个零呢?
- 给定一个整数N,求它的阶乘末尾有多少个0呢?
- 给定一个整数N,求N的阶乘N!末尾有多少个0?
- 给定一个整数N,那么N!末尾有多少了0
- 请设计一个算法,计算n的阶乘有多少个尾随零。 给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数