重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
思路:定义一个函数fun(n)求n的阶乘,接着键盘输入一个整数,调用fun函数输出该数的阶乘。
创新互联专注于企业网络营销推广、网站重做改版、石阡网站定制设计、自适应品牌网站建设、H5响应式网站、商城开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为石阡等各大城市提供网站开发制作服务。
参考代码:
#include"stdio.h"
long fun(int n){
long sum =1;
int i;
for(i=2;i=n;i++)
sum*=i;
return sum;
}
int main()
{
int n;
scanf("%d",n);
printf("%ld",fun(n));
return 0;
}
/*
运行结果:
10
3628800
*/
#include stdio.h
int main()
{
int a=100;
double num=1.0;
//while 循环相乘实现阶乘
while(a0)
{ num *= a;
a--;
}
printf("100!的结果:%le\n",num);
//for循环相乘实现阶乘
num=1;
for(a=1;a=100;a++)
{ num *= a;}
printf("100!的结果:%le\n",num);
return 0;
}
这个有点麻烦了. 跟普通的法子不大一样.
你要用数组来模拟运算.
我这边有一个大整数阶乘的程序,你试试看可能看懂!
不行就百度去,大整数阶乘做关键字,很多的.
#include "stdio.h"
#include "stdlib.h"
#include "memory.h"
#include "math.h"
#include "malloc.h"
void calcFac(int n)
{
int i,j,head,tail;
int blkLen=(int)(n*log10((n+1)/2)); //计算n!有数数字的个数
blkLen+=4; //保险起见,多加4位
if (n1)
{
printf("%ld!=0\n",n);
return;
}
char *arr=(char *)malloc(blkLen);
if (arr==NULL)return ;
memset(arr,0,sizeof(char)*blkLen);
head=tail=blkLen-1;
arr[tail]=1;
for (i=2; i=n; i++)
{
int c=0;
for (j=tail; j=head; j--)
{
int prod=arr[j] * i +c;
arr[j]=(char)( prod % 10);
c= prod / 10;
}
while (c0)
{
head--;
arr[head]=(char)(c % 10);
c/=10;
}
}
for (i=head; i=tail; i++)
printf("%c",arr[i]+'0');
printf("\n");
free(arr);
}
int testCalcFac()
{
int n;
while ( scanf("%d",n)!=EOF)
{
if (n==0)
return -1;
calcFac(n);
}
}
int main(int argc, char* argv[])
{
testCalcFac();
return 0;
}
#includeiostream
#includevector
#includestring
#includealgorithm
using namespace std;
string add(const string a,const string b);
string multiply(const string a,char b);
string multi(const string a,const string b);
string factorial(int n);
int main()
{
coutfactorial(15);
return 0;
}
string add(const string a,const string b)
{
string sh,lo,r; int g=0;
if(a.size()b.size())
{
sh=string(a.size()-b.size(),'0');
sh+=b; lo=a;
}
else
{
sh=string(b.size()-a.size(),'0');
sh+=a; lo=b;
}
r.resize(sh.size());
for(int i=sh.size()-1;i=0;--i)
{
r[i]=sh[i]+lo[i]-48+g;
if(r[i]'9')
{
r[i]-=10;
g=1;
}
else
{
g=0;
}
}
if(g==1)
r="1"+r;
return r;
}
string multiply(const string a,char b)
{
string r;
r.resize(a.size()); int g=0;
if(b=='0')
return "0";
if(b=='1') //加快计算
return a;
for(int i=a.size()-1;i=0;--i)
{
r[i]=(a[i]-48)*(b-48)%10+48+g;
if(r[i]'9')
{
r[i]-=10;
g=((a[i]-48)*(b-48))/10+1;
continue;
}
g=((a[i]-48)*(b-48))/10;
}
if(g!=0)
r.insert(0,string(1,g+48));
return r;
}
string multi(const string a,const string b)
{
string r("0");
string *c=new string[b.size()];
for(int i=0;ib.size();++i)
{
c[i]=multiply(a,b[b.size()-1-i])+string(i,'0');
r=add(r,c[i]);
}
delete[] c;
return r;
}
string factorial(int n)
{
char b[7];
string r="1";
for(int i=1;in+1;++i)
{
itoa(i,b,10);
r=multi(r,b);
}
return r;
}