对于一个数n的阶乘 n! ,计算其后面有几个连续的零。
我们知道,10 = 2 * 5。每一个 2 与一个 5 相乘,结果就增加一个零。所以求 n! 后面的连续零的个数,其实就是求其中相乘的数含有因子每对因子 2 与 5 的个数。又因为从1到某个数,所含 2 的个数比 5 多,所以问题就可以进一步简化到求含有因子5的个数。
JAVA实现代码如下:
- static int zeroCount ( int n) {
- int counter = 0;
- for( int i = 5,m; i <= n; i += 5) {
- m = i;
- while ( m % 5 == 0) {
- counter++;
- m /= 5;
- }
- }
- return counter;
- }
进一步优化算法:
- static int zeroCount ( int n) {
- int counter = 0;
- while ( n >= 5) {
- n /= 5;
- counter += n;
- }
- return counter;
- }