一次笔试求100!末尾0的个数,当时慢慢的"凑"的结果末尾0的个数为24个,因为末尾0是由本身的末尾0(如10、20)、2*5所得的0、还有25,50,75所得的数再与2乘所得的0。
若1000!呢?
后来在网上了解到,有如下方法:
求n!末尾0个数,记为函数F(n!)
对于一个n,若它里面有k个包含'5'的因子,则与'2'相乘后末尾必有k个0(eg:100=5*5*4);
因此F(n!)=F(n*(n-1)*...*2*1)=F(5k*5(k-1)*...*10*5*a),其中a不包含因子'5'。
=F(5^k*k!*a)
=F(5^k)+F(k!)+F(a)
=k+F(k!)+0
=k+F(k!)
所以F(n!)=k+F(k!)
另外 用js计算 函数f(N)
-------------------------------------------------------
var total=0;
function f(N)
{
for(var i=1;i<=N;i++)
{
var j=i;
while(j%5==0)
{
total++;
j/=5;
}
}
return total;
}