计算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,学会了吗??

猜你喜欢

转载自blog.csdn.net/higerwy/article/details/129358831
今日推荐