最近开始刷LeetCode,先从easy的刷起,但发现easy的也有点麻烦(好弱呀)。(刚刚计star进实验室发现了我不会用盲打,Orz。。。)
题目Factorial Trailing Zeroes,就是计算n!后面有几个0的。我开始是这样想的,n!可以看做多个质数的相乘,而末尾的0必定是2*5得到的,所以算出与n!等价的质数乘积的式子中有几个2和几个5,取最小值即可。后来发现2的个数必定大于5的个数,所以有了一下代码:
class Solution {
public:
int trailingZeroes(int n) {
int a = 0, i, k;
for(i = 5; i <= n; i = i + 5)
{
k = i;
while(k % 5 == 0)
{
a++;
k /= 5;
}
}
return a;
}
};
结果是这样子的:Time Limit Exceeded。一般这种情况,说明方法都是错的。
然后去网上搜了答案。才知道是这样子的:
class Solution {
public:
int trailingZeroes(int n) {
int a = 0, i, k;
while(n = n / 5){
a += n;
}
return a;
}
};
感觉别人的讲法有点牵强,我也不能想出更好的解释了,改天问问数学系的同学……