n!末尾有多少个0以及n!末尾第一个非0数字
(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)中的第二种思路解决即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?