如何用C++编写程序计算n!?
1个回答
展开全部
#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的阶乘。我的这个可以算大一点的数
#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的阶乘。我的这个可以算大一点的数
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询