设计一个算法,计算出n阶乘中尾部零的个数 样例 11! = 39916800,因此应该返回 2 思路 也行你觉得很简单,不就是先计算11!=39916800,但是你想想计算11!现在还行,那如果是111111111111!,要计算多少时间呢?? 0是怎么出来的,只有2和5相乘的结果才会出现0,以在1到n之间看看有多少个数是2的倍数以及多少个数是5的倍数就行了。 此外,还有一些特殊情况,比如25这种,其是5和5相乘的结果,这种数和4相乘会出现2个0,同理125和8相乘会出现3个0,……, 每个25的倍数又会多一个0。因此125! 的末尾0的个数就是125/5 + 125/5/5 + 125/5/5/5。 就是625的个数,625乘以16会出现4个0,需要再加1,依次类推…… 代码 class Solution { /* * param n: As desciption * return: An integer, denote the number of trailing zeros in n! */ public long trailingZeros(long n) { long sum=0; while(n>0) { n/=5; sum+=n; } return sum; } };