这是一道很有意思的题,本身看了题目感觉还比较简单,算出阶乘之后直接循环取余就行了,但是题目要求时间复杂度是 O(logn) ,这就很奇怪了,但是这个要求也很明显的提示了:不可能是算出阶乘!
一开始我是从二进制考虑,但是二进制乘法实在不是我擅长的,因为没有耐心所以看了评论区有点像脑筋急转弯~~)的一道题,解法是只有乘法的因子中出现偶数乘 5 ,才会有末位的0出现,而常识可以知道,偶数一定比 5 多,所以只需要看这里面有多少个5,就可以了:
发现是很有意思(
class Solution {
public:
int trailingZeroes(int n) {
int res = 0;
while(n > 0){
n /= 5;
res += n;
}
return res;
}
};