题目:
设计一个算法,计算出n阶乘中尾部零的个数,注意:时间负责度为o(log2)
思路:
要求n的阶乘,就是求1到n这个数相乘,在这1到n个数中,只有2和5相乘才会出现0,其中10的倍数也是可以看成2和5相乘的结果,所以,可以在1到n之间统计有多少个数是2的倍数以及多少个数是5的倍数就行了。很容易发现2的倍数的数一定多于5的倍数,因此可以只看n前面有多少个5就行。
class Solution
{
public:
int TrailingZeros(int n)
{
int sum = 0;
while (n)
{
n /= 5;
sum += n;
}
return sum;
}
};