求1000!后边的0的个数

来源:百度知道 编辑:UC知道 时间:2024/05/29 16:55:55
用pascal 求1000!后边的0的个数 光有算法也可以 应该不是很困难(比如说先算出1000!什么的bt) 谢谢
是1000!那个数所含的0的个数 比如说933660014000 有5个零 是在不行就算最后边有几个零
5 & 10 的个数 好像没那么简单 到25又会增加一个0 到了后来说不定哪里有其他组合 继续增加0的个数 比如说 100! 后边有24个0 只算5 &10的话 只有20个
每25递增一个地话 就是 24 但是400!后边有99个0 就算加上 25递增的也不够 还有每×递增的规律把

呵呵,只有2*5或10的倍数后面有0的
剩下的你自己想了!很简单
或是用数位变换,即把数除以10,取整数部分
除以10整除而加1

末尾有几个零,只要看看这些数中一共有几个质因数5就好了。
1、有四个5的数:625
2、有三个5的数:125、250、375、500、750、875、1000(此处不再算625了)
3、有两个5的数:25、50、75、……、975(以上两类不再计入此处)
4、有一个5的数:5、10、15、……、995(以上三类不再计入此处)
第一类1个数,共4个5
第二类7个数,共21个5
第三类32个数,共64个5
第四类160个数,共160个5
合计共有249个5,那么1000!的末尾就有249个0.

25=5*5 100=10*10 50=5*10 75=3*5*5 这些5跟10的组合 须按 2个来算,共24个0

其实只要算出每个数中含有因子5的个数,他们的和就是阶乘最后0的个数。

我编了个程序如下:
#include "stdio.h"
#include "math.h"

main()
{ int n=1,s=0;
int i=0,k=0;
while(n<1001)
{ i=n;
while(i%5==0)
{ k++;
i=i/5;
}
n++;
}
printf("\n k=%d",k);
}

这样1000!最后零的个数为 249个

补充:
输入:
输出:k值,也就是后面0的个数
算法:
1 变量初