172. Factorial Trailing Zeroes
2017-01-13 07:10
323 查看
Given an integer n, return the number of trailing zeroes in n!.
Note: Your solution should be in logarithmic time complexity.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
因为n!末尾所有的0有来自于5*2,所以需要统计的是1-n有多少个5。
拿25来说,本身有两个5,所以它除以5,得5说明底下有5个包含5的数,得的这个5,也算一个5,所以最后有6个0.
拿75来说,本身有两个5,下面的50也有两个5,下面的25也有两个5,那么它下面含多个5的数就有75/5/5个。
我们很容易观察到质因子中2的个数总是大于等于5的个数。因此只要计数5的个数就可以了。那么怎样计算n!的质因子中所有5的个数呢?一个简单的方法是计算floor(n/5)。例如,7!有一个5,10!有两个5。除此之外,还有一件事情要考虑。诸如25,125之类的数字有不止一个5。例如,如果我们考虑28!,我们得到一个额外的5,并且0的总数变成了6。处理这个问题也很简单,首先对n÷5,移除所有的单个5,然后÷25,移除额外的5,以此类推。下面是归纳出的计算后缀0的公式。
n!后缀0的个数 = n!质因子中5的个数
= floor(n/5) + floor(n/25) + floor(n/125) + ....
代码如下:
public class Solution {
public int trailingZeroes(int n) {
int result = 0;
while (n >= 5) {
n /= 5;
result += n;
}
return result;
//递归解法
//return (n == 0)? 0: n/5 + trailingZeroes(n/5);
}
}
Note: Your solution should be in logarithmic time complexity.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
因为n!末尾所有的0有来自于5*2,所以需要统计的是1-n有多少个5。
拿25来说,本身有两个5,所以它除以5,得5说明底下有5个包含5的数,得的这个5,也算一个5,所以最后有6个0.
拿75来说,本身有两个5,下面的50也有两个5,下面的25也有两个5,那么它下面含多个5的数就有75/5/5个。
我们很容易观察到质因子中2的个数总是大于等于5的个数。因此只要计数5的个数就可以了。那么怎样计算n!的质因子中所有5的个数呢?一个简单的方法是计算floor(n/5)。例如,7!有一个5,10!有两个5。除此之外,还有一件事情要考虑。诸如25,125之类的数字有不止一个5。例如,如果我们考虑28!,我们得到一个额外的5,并且0的总数变成了6。处理这个问题也很简单,首先对n÷5,移除所有的单个5,然后÷25,移除额外的5,以此类推。下面是归纳出的计算后缀0的公式。
n!后缀0的个数 = n!质因子中5的个数
= floor(n/5) + floor(n/25) + floor(n/125) + ....
代码如下:
public class Solution {
public int trailingZeroes(int n) {
int result = 0;
while (n >= 5) {
n /= 5;
result += n;
}
return result;
//递归解法
//return (n == 0)? 0: n/5 + trailingZeroes(n/5);
}
}
相关文章推荐
- 172. Factorial Trailing Zeroes LeetCode
- 172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes [easy] (Python)
- 172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes
- leetcode(45).172. Factorial Trailing Zeroes
- leecode 解题总结:172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes
- [leetcode]: 172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes
- leetcode-172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes
- Leetcode 172. Factorial Trailing Zeroes
- 172. Factorial Trailing Zeroes计算n!末尾0的个数
- [LeetCode]172. Factorial Trailing Zeroes
- leetcode - 172. Factorial Trailing Zeroes
- Leetcode 172. Factorial Trailing Zeroes (Easy) (cpp)
- 172. Factorial Trailing Zeroes -- 求n的阶乘末尾有几个0