C语言 选择题填空题

下面程序段的功能是计算1000!的末尾含有多少个零,请选择填空,(提示:只要算出1000!中含有因数5的个数即可)

for(k=0,i=5;i<=1000;i+=5)
{
m=i;
while(_____) {k++;m=m/5;}
}
答案是m%5==0

我不明白(提示:只要算出1000!中含有因数5的个数即可)中含有因数5的个数是什么意思

m=m/5 是什么意思?

题目要求的是计算1000! 但是程序段中没有计算1000!的语句啊?

麻烦帮每一步帮我详细解释一下 我是初学者 有点迷糊

因为1000!的结尾有几个0之和2和5有关,只有5*2才可能出现0,1000!是1*2*3····*1000,将每个数分解,2已经存在,因此只要乘个5就会出现一个0,所以现在要计算的是有多少个5。while(_____) {k++;m=m/5;}
这一句就是计算1···1000这一千个数中每个可以写成5的多少次方,比如10!的结尾就应该有2个0,计算如下:
1为1*5的零次方,2为2*5的零次方,···,5=5的一次方,····,10=2*5的一次方,这里其他数想乘都不会出现0,但只要乘个5就会出现0,10!=1*2*3*4*5*6*7*8*9*10=28*34*52*7=((128*81*7)*2*5)*5
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-02
因为最终阶乘的值中,分解为质数因子时,2的阶次远远多于5的阶次,因此只需要计算最终积有多少个5的重复因子就可以了,循环就是在累加从1到1000各个数所包含5的因子的次数
第2个回答  2011-01-02
含有因数5的个数---指的是能被五整除的数的个数
m=m/5 等价于 m除以5的商,不计余数

for(k=0,i=5;i<=1000;i+=5) //k,i的初值为0,5 i在小于或等于1000的情况下执行下面的语句,i每次加5
{
m=i; //i复制给m
while(_____) {k++;m=m/5;} //()中内容为真的情况下执行下面一句话,k+1,m除以5
}
第3个回答  2011-01-02
由(2,5)的组数决定有多少0,2的个数肯定比5多,所以就由5决定0的个数了。