如何用C++编写程序计算n!?

 我来答
云的眼泪在飘
推荐于2019-09-20
知道答主
回答量:3
采纳率:0%
帮助的人:3.2万
展开全部
#include"iostream.h"
#include"math.h"
#include"stdlib.h"
#include"iomanip.h"

int getn()
{
int n;
cout<<"请输入N!中的N\n";
cin>>n;
while(n<0)
{
cout<<"输入有错!请重新输入!"<<endl;
cin>>n;
}
if(n==0)
exit(1);
return n;
}

int getbitnum(int n)
{
double sum=1.0;
for(int i=1;i<n;i++)
sum+=log10(i);
return (int)sum;
}

char * init(int size)
{
char *pa=new char[size];
if(!pa)
{
cout<<"too large factor of"<<size<<endl;
exit(1);
}
pa[0]=1;
for(int i=1;i<size;i++)
pa[i]=0;
return pa;

}

void calc(char *a,int n)
{
double bitcount=1;
int begin=0;
for(int i=2;i<=n;i++)
{
long and=0;
bitcount+=log10(i);
if(a[begin]==0)
begin++;

for(int j=begin;j<int(bitcount);j++)
{
and+=i*a[j];
a[j]=char(and%10);
and/=10;
}
}
}

void display(char *a,int size)
{
int bit=0;
for(int i=size-1;i>=0;i--)
{
if(bit%60==0)
cout<<endl<<"第"<<setw(3)<<(bit/50+1)<<"个50位:";
cout<<(int)a[i];
bit++;
}
cout<<endl;
}

void main()
{
int n=getn();
int size=getbitnum(n);
char *pa=init(size);
calc(pa,n);
display(pa,size);
delete []pa;
}
楼上的几位代码没有错误,我赞同。但是只能算一些n比较小的阶乘,遇到数字大的就会溢出。楼主可以试试1000的阶乘。我的这个可以算大一点的数
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式