原题
题解
这道题其实考察的是数学, 后面有多少个0,也就是多少个10,而我们知道10的公因数为2,5.所以我们只需要计算阶乘中的数2和5的因子就足够了。取他们的最小值
class Solution {
public:
int contain(int n,int fac){
int num = 0;
while(true){
if(n<fac) break;
if(n%fac != 0) break;
n /= fac;
num++;
}
return num;
}
int trailingZeroes(int n) {
int a = 0; //2的数量
int b = 0; //5的数量
for(int i = n;i>=5;i--){
a += contain(i,2);
b += contain(i,5);
}
return min(a+3,b);
}
};
但是我们知道小的因数个数必然更多,所以我们没必要把2考虑进去,考虑5即可
class Solution {
public:
int trailingZeroes(int n) {
int num = 0; //5的数量
for(int i = 5;i<=n;i+=5){
for(int j = i;j%5 == 0;j/=5){
num++;
}
}
return num;
}
};