一、问题描述
计算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,学会了吗??