Given an integer n, return the number of trailing zeroes in n!.
给定n,求n!的末尾有几个零。
能组成零的末尾的莫过于2*5,和本身就是0结尾的,如10,20,。。。可以注意到以0结尾的也是可以分解成2*5的,所以目标就转化为求几个2*5因子了,又注意到,明显的5的因子个数比2的个数要少,例如n为6的时候只有一个5,但是仅仅4中就有两个2了。所以又转化为求5的个数就行了。
因为5是每隔5出现一次,所以n除以5就是总共有几个含5的因子数了?是吗,其实25中有两个5,这样的话只算了一个5,还有一个漏掉了。
所以你还要除以25,计算有几个25,依次类推还要125,625,。。。,知道5^k > n 为止。
注意到 n/25 = n/5 /5, n/125 = n/25 /5,..., 所以我们可以每次都用/5,只是将n的值每次/5赋值就可。
class Solution { public: int trailingZeroes(int n) { int cnt = 0; while(n > 4){ cnt += n / 5; n /= 5; } return cnt; } };