Factorial Trailing Zeroes
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
求 n!中,末尾的0连续有多少个。
例如 10!=10*9*8*7*6*5*4*3*2*1 所以末尾0的个数为2
因为,n!可以写成质因数的乘积,n!=2x*3y*5z*...... ,2*5=10, 故末尾0的个数等于min(x,z),即2与5的个数的最小值。
5的个数比2的个数大,因为n!中,每两个数就含有2,每5个数才含有5。
所以只用求n!的质因数成绩中,5的个数即可。
n/5得到5个数,但像25,75.....这种有多个5的,就需要再n/5
class Solution {
public:
int trailingZeroes(int n) {
int ans = 0;
while (n) {
ans += n/5;
n /= 5;
}
return ans;
}
};
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.