2020年杭州师范大学考研真题:C语言计算1000!的末尾有多少个零的答案与解题思路,还有详细分析。
在网上查找时发现,找不到这道题的答案与解析,虽然有分析的小伙伴,但具体填什么也并没有说明,故写一下我解题的思路和这道题的答案。
答案在文中。
计算1000的阶乘后零的个数,比较常见的方法,也是一般第一个想到的可能是先计算出1000!的结果,然后计算该结果末尾零的个数。
而这道填空题是这样的:

首先和普通方法不同的是, 可以看到在for循环中i是以每次加5的形式递增的。
其次i+5引导我们思考5这个数字的特殊性。
解题思路:
5的特殊性在于只有 包含5或能够被5整除的数字 与其他数字相乘才会使得数有零。例如,5和2,4,6想乘都能得出末尾有零的数字;25和2,4,6或24同样会产生0,而25中有两个5,故包含两个0(比如25*24=600);30(5*6)中有一个5,它不管和谁乘(除了本身就有0的数字,例如20),都只会有一个0。所以这道题就转换成了,找1-1000中所有数字包含5的个数,有几个5就会有几个0,所以我认为空格处应填写:m%5==0
详细解析:
第一次循环:
i 初始化为5,m=i; 故m=5
进入while判断,如果m%5==0的意思就是当m能被5除尽时,说明m中包含5,执行while中的语句,m此时为5,而m%5=0,为真,进入循环
计次变量的k加1,表示该i 中有一个5
m=m/5;m的值变为1,再进入while判断,此时m%5=1,所以不符合,则跳出while循环,for循环的第一次循环结束
进行i+5,i =10
第二次循环
m=i ; 故m=10
进入while判断,10%5=0,为真,进入循环
计次变量的k加1,表示该i 中有一个5
m=m/5;m的值变为2,再进入while判断,此时m%5=2,所以不符合,则跳出while循环,i+5
。
。
。
以此类推,测试比较特殊的25
第5次循环,i =25
m=i ; 故m=25
进入while判断,25%5=0,为真,进入循环
计次变量的k加1,表示该i 中有一个5
m=m/5;m的值变为5,再进入while判断,此时m%5=0(即5%5=0),符合,
再次进入while判断,5%5=0,为真,进入循环
计次变量的k加1,表示该i 中有一个5
m=m/5;m的值变为1,再进入while判断,此时m%5=1(即1%5=1),不符合,则跳出while循环,进行下一次for循环
其他的同理。
如有错误,欢迎指正~~~

浙公网安备 33010602011771号