当要计算n!时,n不能太大,不然计算机存储不了,一般double为64位,用其存储十进制整数时,其能表示的只能是20位长度,现在要计算一个n!,使得s在50位之内都能够计算出来。
#include<iostream.h>
#define MAX 50
int a[MAX];
void main()
{
int n;
cout<<"-1 is end"<<endl;
cout<<"cin>>n: ";
cin>>n;
while(n!=-1)
{
int len=1;
a[0]=1;
bool flag=0;
for(int i=1;i<=n;i++)
{
int add=0;
for(int j=0;j<len;j++)
{
a[j]*=i;
a[j]+=add;
if(a[j]>=10)
{
add=a[j]/10;
a[j]=a[j]%10;
}
else
add=0;
}
while(add>0)
{
a[len]=add%10;
add/=10;
len++;
if(len>=MAX){
cout<<"error"<<endl;
flag=1;
break;
}
}
if(flag==1)break;
}
if(flag==0)
{
for(i=len-1;i>=0;i--)
cout<<a[i];
cout<<endl;
}
cout<<"cin>>n: ";
cin>>n;
}
}