计算2023的阶乘末尾共有多少个连续的0(注意计算溢出问题)

一、问题描述

计算2023!的末尾共有多少个连续的0。(提示:先写一个函数K=nFact(x,a),  用于求x能够被a整除多少次,即满足条件(x能够被aK整除)的最大的K)。

二、关键问题

大部分人一开始会想先把2023的阶乘计算出来然后求它能被10整除多少次,这样是不行的!

本问题需要考虑计算溢出的问题阶乘的增长比指数都要快,因此直接计算2023!是行不通的,matlab会报错!!!

 

三、解决思路

2023!=1*2*3*…2023

2023!的末尾有多少个0就转化成遍历1,2,…,2023每个数能被5整除多少次,5x2=10末尾就会产生多少个0。

四、代码展示

function  K=nfact(x,a)
%gaoshou
%2023-03-06
%用于求x能够被a整除多少次
K=0;
while (rem(x,a)==0)
    K=K+1;
    x=x/a;
end
end

从1到2023调用nfact(x,a)就解决啦!!!!

num=0;
for i=1:2023
    num=num+nfact(i,5);
end

最终结果是503,学会了吗??

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值