关于大整数n!的问题!
对于一个整数n,当n超过30之后,n!将会是一个比较大的数,而longlong类型将不能存储下这么大的数·,这是你只能用到高精度的知识,运用数组来存放这些数,呵呵!!看看下面的例子吧!!
这是一道求1000!的例子,希望能对你有帮助!!!!
#include<iostream>
using namespace std;
int main()
{
int n;
int num[50001],c;
int k;
while(cin>>n)
{
memset(num,0,sizeof(num));//用0初始化!
num[0]=1;
for(int i=1;i<=n;i++)
{ c=0;//表示进位!!
for(int j=0;j<50001;j++)
{
int s=num[j]*i+c;
num[j]=s%10;
c=s/10;//进位数
}
}
for(k=50000;k>=0;k--)
if(num[k]==0)
break;
for(int j=k;j>=0;j--)
cout<<num[j];
cout<<endl;
}
return 0;
}
代码的进一步优化,因为int类型能存9位数,所以进一步优化代码如下:
#include<iostream>
using namespace std;
int main()
{
int n;
int num[20002],i,j,k,c;
while(cin>>n)
{
memset(num,0,sizeof(num));
num[0]=1;
for(i=1;i<=n;i++)
{
c=0;
for(j=0;j<=20001;j++)
{
int s=num[j]*i+c;
num[j]=s%1000000;
c=s/1000000;
}
}
for(k=20001;k>=0;k--)
if(num[k]!=0)
break;
cout<<num[k];
for(i=k-1;i>=0;i--)
printf("%06d",num[i]);//6位的数字不足的在前面加0!!
cout<<endl;
}
return 0;
}