要求:求阶乘后的数末尾几个0
思路:10的质数分解是25,有多少0等价于多少个52,因为阶乘所有数里2比较多所以等价于5个数,即求1到n总共有多少个因子5
class Solution {
public:
int trailingZeroes(int n) {
if(n==0)return 0;
int ans=0;
for(int i=5;i<=n;i+=5){
int tmp=i;
while(tmp%5==0){
++ans;
tmp/=5;
}
}
return ans;
}
};
实际上还可以继续优化,5,10,…,25,…,125
观察得知隔5个多一个5,即n/5个,隔25个多1个5,隔125个再多一个5…
class Solution {
public:
int trailingZeroes(int n) {
if(n==0)return 0;
int ans=0;
while(n!=0){
ans+=n/5;
n=n/5;
}
return ans;
}
};