招兵宣传片:怎样用C++编程求100!的尾数有几个0?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/02 12:51:55
能否用类来实现
我想用类来编啊!哪位大哥指导指导!

// zd_67.cpp : Defines the entry point for the console application.
//
#include <stdio.h>

int main(int argc, char* argv[])
{
int i,num=0;
long int sum=1;
for(i=1;i<=100;i++)
{
sum*=i;
while(sum%10==0 && sum>=10)
{
sum/=10;
num++;
}
if(sum>100)
sum%=100;
}
printf("%d\n",num);
return 0;
}

运行结果:
24
Press any key to continue

10到100有11个0
5到95乘以偶数有10个0
25,50,75乘以4则另多出一个0
所以一共24

看看这个,VC下编译运行。
2.n! n∈(1,20000)输出的是n!的准确数,至于有多少个0你自己想办法吧。
#include "math.h"
int main(int argc, char* argv[])
{
int i,j,Num=20000,Exp=0,Temp;
printf("请输入一个(1,20000)之内的数:");
scanf("%d",&Num);
if(Num<1) Num=1;
if(Num>20000) Num=20000;
int Fac[20000];
Fac[0]=1;
for(i=1;i<20000;i++) Fac[i]=0;
for(i=1;i<=Num;i++)
{
for(j=0;j<=Exp;j++) Fac[j]*=i;
Temp=Exp;
for(j=0;j<=Temp;j++)
{
if(Fac[j]>100000)
{
Fac[j+1]=Fac[j+1]+int(Fac[j]/100000);
Fac[j]=Fac[j]%100000;
Exp=j+1;
}
}
}
Temp=int(log10(Fac[Exp])+1)+Exp*5;

printf("%d!共有%d位,详细数据如下:\n%d",Num,Temp,Fac[Exp]);
for(i=Exp-1;i>=0;i--) printf("%05d",Fac[i]);
return 0;
}

以5为步长,统计100内有几步m
以25为步长,统计100内有几步n
m+n=100/5+100/25即为所求

不用这么麻烦的,只要统计100!含有几个质因数5,100!就有几个0,因为一个0是由一个2和一个5乘出来的,而2的个数远远大于5的个数,所以只要统计1-100每个数含有的质因数5的个数就行了。具体的统计方法也不用一个一个统计,只要先统计出5的倍数的数的个数,再统计5的倍数的5的倍数的数的个数。。。依此类推,这样就行了。程序编起来也很容易,其实我不会C++,我是用P的。