输入一个自然数n,求n!,同时统计结果中有多少个0

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:18:51
用C 语言编
请各位高手帮帮忙 给出源代码
求阶乘的代码 我自己写了出来 就是后面的不会
#include<stdio.h>
unsigned long mul(int n);
int main()
{
int m;
puts("Calculate n! n=?\n");
scanf("%d", &m);
printf("%d!=%ld\n", m, mul(m));
getch();
return 0;
}
unsigned long mul(int n)
{
unsigned long p;
if(n>1)
p=n*mul(n-1);
else
p=1L;
return(p);

#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);
}
阶乘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)*(2*5)*11……

后面的式子中有几个5就有 就会得到几个末位0的原理,自己想一下,这个函数可以算很多数。

#include<iostream.h>
void main()
{int n,i;
long int sn=1,t;
cout<<"请输入n的值:";
cin>>n;
for(i=1;i<=n;i++)
sn=sn*i;