您的位置:首页 > 大数据 > 人工智能

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: