problems:
Given an integer n, return the number of trailing zeroes in n!.
Example 1:
Input: 3
Output: 0
Explanation: 3! = 6, no trailing zero.
Example 2:
Input: 5
Output: 1
Explanation: 5! = 120, one trailing zero.
Note: Your solution should be in logarithmic time complexity.
tip:
求阶乘的末尾的0的个数.
solutions:
1.直接用最暴力,最直接能想到的方法求解,先求阶乘,然后计算它末尾的0个数,虽然也知道一定会出错,会导致存储空间溢出.和上一题类似,这种连乘的操作必然会有问题.
class Solution {
public:
int trailingZeroes(int n) {
if(n == 0) return 1;
int res=1;
int k = 0;
while(n)
{
res = res * n;
n--;
}
while(res%10 == 0)
{
k++;
res = res/10;
}
return k;
}
};
2.思路解析参考 https://blog.csdn.net/taoyanqi8932/article/details/52129450
解释的很到位,清晰易懂.
1.需要注意的是后缀0是由2,5相乘得来,因此只需看有多少个2,5即可
n = 5: 5!的质因子中 (2 * 2 * 2 * 3 * 5)包含一个5和三个2。因而后缀0的个数是1。
n = 11: 11!的质因子中(2^8 * 3^4 * 5^2 * 7)包含两个5和三个2。于是后缀0的个数就是2。
2.质因子中2的个数总是大于等于5的个数。因此只要计数5的个数就可以了。
例如: 11中有两个5因此输出2.可用 n/5=2;
3.需要注意的是25中有25,20,15,10,5,但是25又可以分为5*5,
因此需要判断t=n/5后中t的5个数
class Solution {
public:
int trailingZeroes(int n) {
int count = 0;
while(n)
{
count= count + n/5;
n=n/5;
}
return count;
}
};