//?
//*问题分析与算法设计可以设想:先求出100!的值,然后数一下末尾有多少个零。事实上,与上题一样,由于计算机所能表示的整
//数范围有限,这是不可能的。 为了解决这个问题,必须首先从数学上分析在100!结果值的末尾产生零的条件。不难看出:一个整
//数若含有一个因子5,则必然会在求100!时产生一个零。因此问题转化为求1到100这100个整数中包含了多少个因子5。若整数N能被25整
//除,则N包含2个因子5;若整数N能被5整除,则N包含1个因子5。*程序说明与注释
#include<stdio.h>
int main()
{
int a,count =0
for(a=5a<=100a+=5) //循环从5开始,以5的倍数为步长,考察整数
{++count
//若为5的倍数,计数器加1
if(!(a%25))
++count//若为25的倍数,计数器再加1
}
printf("The number of 0 in the end of 100! is: %d.\n",count)//打印结果return 0
}
long i = 1long j =1
while(i<=100){
j = j * i
i++
}
System.out.print(j)
j是最终结果。
定义为long double仍然会溢出,因为在32位系统下long double仍然只有32位,下面即可:#include <stdio.h>
int n
int r[600]={0}
int count(n)
{
int i
for(i=0i<600i++)
r[i]*=n
for(i=599i>0i--)
{
r[i-1]=r[i-1]+r[i]/10
r[i]=r[i]%10
}
}
int main()
{
int i
int reach=0
r[599]=1
scanf("%d",&n)
for(i=1i<=ni++)
count(i)
for(i=0i<600i++)
{if(r[i]) reach=1
if(r[i]||reach) printf("%d",r[i])
}
getchar()
getchar()
}