作业帮 > 综合 > 作业

输入一个自然数n,求n!,同时统计结果中有多少个0程序分析解释

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 05:08:22
输入一个自然数n,求n!,同时统计结果中有多少个0程序分析解释
#include "stdio.h"
void main()
{
int fun(int x);
float jc(int x);
int n,i;
float k;
printf("type in the \n");
scanf("%d",&n);
i=fun (n);
k=jc (n);
printf("%d!is %10.0f\nthere are %d zero!\n",n,k,i);
}
int fun(int x)
{
int i=0;
while(x!=0)
{
x=x/5;
i+=x;
}
return (i);
}
float jc(int x)
{
float i;
if (x==0||x==1)
i=1;
else
i=jc(x-1)*x;
return (i);
}
需要此程序每步的解释
不知道你要详细到什么程度!
首先要明白求N!结果中未尾0个数的算法思想:N的2的因子多于5的因子,有一个5的因子就可得到一个0,N
可以分解出几个5的因子就可得到几个0.(例如求2008!未尾0的个数:2008/5+2008/25+2008/125+2008/625=500或2008/5+401/5+80/5+16/5=500)
#include "stdio.h" /*包含标准输入输出文件*/
void main() /*主函数*/
{
int fun(int x); /*声明fun函数,此函数用于求N!未尾0的个数*/
float jc(int x); /*声明jc函数,此函数用于求N!*/
int n,i;
float k;
printf("type in the n!\n"); /*输出提示信息*/
scanf("%d",&n); /*输入一个整数N*/
i=fun (n); /*求N!未尾0的个数*/
k=jc (n); /*求N!*/
printf("%d!is %10.0f\nthere are %d zero!\n",n,k,i); /*输出结果*/
}
int fun(int x)/*定义fun函数*/
{
int i=0;
while(x!=0)/*请参照求2008!未尾0的个数仔细理解此while循环*/
{
x=x/5;
i+=x;
}
return (i); /*返回N!未尾0的个数*/
}
float jc(int x)/*定义jc函数*/
{
float i;
if (x==0||x==1)/*0!=1、1!=1此为递归调用的出口*/
i=1;
else
i=jc(x-1)*x;/*递归调用jc函数(执行N!=(N-1)!*N)*/
return (i); /*返回N!*/
}
不懂的话,多看看C语言入门书籍!