作者在 2008-10-11 11:12:02 发布以下内容
/*我们考虑100!末尾为0的个数,在此就不能再用上面那段代码了
分析100!中末尾为0的数都是10的因子,而10的因子是2*5构成,2的因子显然比5的因子要多,因此,求10的因子就是求此数中5的因子的个数,进而我们就可以求的末尾为0的个数。在1~100中,5的因子出现了20次,其中25,50,75,100中有两个5的因子因此总共5的因子数为20+4=24,那么100!中末尾为0的个数就是24个。
分析100!中末尾为0的数都是10的因子,而10的因子是2*5构成,2的因子显然比5的因子要多,因此,求10的因子就是求此数中5的因子的个数,进而我们就可以求的末尾为0的个数。在1~100中,5的因子出现了20次,其中25,50,75,100中有两个5的因子因此总共5的因子数为20+4=24,那么100!中末尾为0的个数就是24个。
具体算法如下:
1 给出N的值
2 设一变量K为记录末尾为0的个数
3 for(int i=5,i<=n,i+=5)
4 x=I中含有5的因子个数
5 k=k+x
6 输出K
I中含有5的因子个数的算法如下:
1 设一数N=0
2 for(;i%5==0,n++)
3 i/=5
4 返回N
代码如下:
*/
#include<stdio.h>
#include<conio.c>
long numof5(long n);
int main()
{
long n,k;
while(1){
k=0;
scanf("%d",&n);
for(int i=5;i<=n;i+=5)
{
k+=numof5(i);
}
printf("%d\n",k);
}
}
long numof5(long n)
{
int i=0;
for(;n%5==0;i++)
{
n/=5;
}
return i;
}
代码如下:
*/
#include<stdio.h>
#include<conio.c>
long numof5(long n);
int main()
{
long n,k;
while(1){
k=0;
scanf("%d",&n);
for(int i=5;i<=n;i+=5)
{
k+=numof5(i);
}
printf("%d\n",k);
}
}
long numof5(long n)
{
int i=0;
for(;n%5==0;i++)
{
n/=5;
}
return i;
}