这是一道算法题,题目在这里:https://leetcode-cn.com/problems/factorial-trailing-zeroes/
有多少个零,其实就是算乘了多少个10,而乘了多少个10可以改为统计乘了多少个5。(2很多,因为偶数很多)
懂得了这个思路,其实代码就很简单。循环一遍所有乘数,然后逐一分析每个数最多可以分解出多少个5相乘,把这些5的个数相加,就是乘10的个数,就是尾部0的个数。
/** * 求n!结尾有多少个零 */ public class ZeroCount { public static void main(String[] args) { for (int i = 1; i <= 10000; i++) { System.out.println(i + "!尾部有" + zeroCount(i) + "个零"); } } /** * n返回n!尾部有多少个零 */ private static int zeroCount(int n) { int zeroCount = 0; for (int i = 1; i <= n; i++) { zeroCount += fiveCount(i); } return zeroCount; } /** * 返回有多少个因子5 */ private static int fiveCount(int num) { int r = num % 5; int fiveCount = 0; while (r == 0 && num >= 5) { fiveCount++; num /= 5; r = num % 5; } return fiveCount; } }
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2595