输入一个自然数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!\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语言入门书籍!!
温馨提示:内容为网友见解,仅供参考
无其他回答

输入一个自然数n,求n!,同时统计结果中有多少个0程序分析解释
首先要明白求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" \/*包含标准输入输出文...

输入一个自然数n,求n!,同时统计结果中有多少个0
if (x==0||x==1)i=1;else i=jc(x-1)*x;return (i);} 阶乘jc()函数是仿照谭浩强的c程序设计编写的,由于位数的关系只能算到12!你可以自己改精度 求零部分是自己想出来的,用的是n!=1*2*3*4*5*6*7*8*9*10*11……=1*2*3*(2*2)*5*(2*3)*7*(2*2*2)*(3*3)*(...

输入一个自然数n,求n!,同时统计结果中有多少个0。
nStr[0]='1',nStr[1]=0; printf("输入一个自然数n,求n!\\n");

输入一个自然数n,求n!,同时统计结果中有多少个0.
算法不复杂,先计算阶乘,调用计算阶乘的函数int functiong(int n){ int result=1; while(n) { result=result*n; n--; } return result;}阶乘结果很容易超过整形数据的范围,你可以考虑用长整形数据来保存结果。然后统计计算结果中的0的个数。这个可以用余数的方法来做。...

输入一个自然数n,求n!,同时统计结果中有多少个0.
n,i=0;long int sn=1,t;printf("请输入n的值:");scanf("%d\\n",&n);for(i=1;i<=n;i++)sn=sn*i;t=sn;while(sn!=0){ sn=sn\/5;i++;\/\/累计0的个数 } printf("%d的阶乘结果为\\n",t);printf("结果中0的个数为:%d",i);} 用的是n!=1*2*3*4*5*6*7*8*9*10*...

...输入一个自然数n,求 n!,同时统计结果中有多少个0。
int account(int m) \/\/计算n!里面0的个数 { int i=0; \/\/存放0的个数 while(m>=10){ if(m%10==0)i++;m\/=10;} return i;} void main(){ int n;cin>>n;cout<<"n!="<<factorial(n)<<endl;cout<<"n!结果里0的个数有:"<<account(factorial(n))<<endl;} 运行过了...

c++编程:输入一个自然数n,求 ,同时统计结果中有多少个0。
计算函数可以写为:int Calc(int k){ int ss=0;int sum=0;while(k != 0){ ss = k%10;if(ss == 0)sum++;k = (k-ss)\/10;} return sum;} 当然,你也可以把我下面的代码全部copy一下,直接运行即可得结果,调试通过:include<iostream> using namespace std;int Calc(int k){ int...

用c语言实现,输入一个自然数n(n>0),统计n中有多少个0?
\/\/基本思路:有零时那一位就能被10整除,比如:\/\/ 103045,每次除10:103045、10304、1030、103、10、1 \/\/中1030和10能被10整除,那么就有两个零。void Func( int n){ int num = 0;int local_n = n;if(local_n <0){ printf("Error, the parameter should not < 0\\n");} whil...

输入一个自然数n,求n!,同时统计结果中有多少0的流程图
开始 ↓ 输入n,a ↓ n=1*2*3*…*n ↓ 输出n ↓ a=n中有几个0?↓ 输出a ↓ 结束 !!!

...输入一个自然数n,求 ,同时统计结果中有多少个0。 下面是我编的程序...
改成return就可以了。另外,有几个问题 1.你的题目中没有说求什么, 从你的代码上看 似乎是求阶乘?如果是的话,那么要注意有没有要求n的范围。如果没有限定的话,那么很容易就溢出了 这种情况下要使用大数运算 2. 如果是求阶乘的话,那么要对0的阶乘单独赋值 3. 判断结果中有几个0的程序有...

相似回答