给定一个整数 n,返回 n! 结果尾数中零的数量。
var trailingZeroes = function(n) {
//求阶乘
var res = 1
for( var i = 2 ; i <= n ; i ++){
// if( i % 2 === 0 || i % 5 === 0){
res *= i
// }
}
//将阶乘的值转化为字符串,方便遍历
var str = res.toString()
//记录0的个数
var count = 0;
// console.log(str) //2.6525285981219103e+32
for(var i = str.length - 1 ;i > 0 ; i--){
if(str[i] != 0) break;
count ++
}
return count
};
- 不会以为这种代码就可以了吧???不会吧?
- 当输入的数字过大时,例如30 , 30的阶乘是一个非常庞大的数字,计算机会使用科学计数法来表示,那么这种方法会因为科学计数法导致结果错误
- 下面的代码是根据数学关系鞋的,步骤相当简单,就是理解有点费劲
举例说明,题目:22! 中尾数0的个数。
22! 中,5的倍数的有Math.floor(22/5)=4个,分别是5 10 15 20。
根据前面的分析,题目等价于:5 * 10 * 15 * 20 中尾数0的个数
所以,题目等价于:5^k*k!中尾数0的个数
等价于:k + (k! 中尾数0的个数)
var trailingZeroes = function(n) {
var count = 0;
//根据数学关系发现 要想尾数是0 那么 2*5 = 10 ,即找5的倍数,和他的除以5之后继续除以5循环求得0的个数
while( n >= 5){
count += parseInt( n / 5)
//改变n的值
n /= 5
}
return count
};