Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
本题的意思是计算N的阶乘最后一共有多少个零。
首先要分析零是怎么来的?
每出现一个零,那么必然会有10这个因素,10 = 2*5,所以只需计算有多少对2*5出现就可以了。
比如说5的阶乘,5有一个,2有3个(4 = 2*2, 2),那么最多只有1对。
同时应该看出,每出现一个5,2的个数肯定会多余5。那么,我们只需要计算有多少个5出现就好了。
最开始只想的 num = N/5. 因为每隔5个就会出现一个5,比如20,就会有4个5出现。
这种想法没有注意到有些数会由多个5构成,比如25,可以分解成25 = 5*5 ,50 = 5*5 * 2带入到阶乘里面,就会出现多一个5的情况。
那么这种多一个或几个的情况怎么考虑呢?想一下,我们可以计算N中有几个5+几个25+几个125。
比如25,里面有5个5+1个25,那么就会有6个5.
class Solution {
public:
int trailingZeroes(int n) {
int sum = 0;
while(n > 0)
{
sum += n / 5;
n = n / 5;
}
return sum;
}
};