(1)n!末尾有多少个0
第一种思路:
n!=n*(n-1)*(n-2)*....3*2*1,而如果要出现0,必须得有2和5出现,但是明显n!中5的因子个数少于2的因子个数,即转化为求 n!中因子5的个数
int count(int n)
{
int sum=0;
while(n)
{
sum+=n/5;
n/=5;
}
return sum;
}
第二种思路:计算n!,每次末尾出现0,则将0消去,计数器并自增1
int count=0;
int ans=1;
for(i=n;i>=2;i--)
{
ans*=i;
while(ans%10==0) //消除末尾的0
{
ans/=10;
count++;
}
if(ans>=100000) //只需保存末尾5位数字即可
ans%=100000;
}
while(ans%10==0) //消除末尾的0
{
ans/=10;
count++;
}
count即为所求
(2)n!末尾第一个非0数字
两种思路
第一种:直接求出n!,然后得出结果
第二种:按照问题(1)中的第二种思路解决即可。