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循环

其他的同理。

 

 

如有错误,欢迎指正~~~

 

 

 

posted @ 2020-12-23 20:26  _YeLL  阅读(1252)  评论(0)    收藏  举报