//此程序可实现任意位数的阶乘
#include <iostream>
#include <math.h> //包含对数运算的头文件
#define e 2.718281828459
#define PI 3.1415926535898
using namespace std;
int digits(int n) //利用斯特林公式求n!的位数
{
int i,len;
for(i=0;i<n;i++)
{
len=log10(2.0*PI*n)/2.0+n*log10(n/e)+1;
}
return len;
}
int main()
{
while(1)
{
int temp,digit,n,i,j;
cout<<"请输入要计算的阶乘n:";
cin>>n;
int *result=new int [digits(n)];//按位数分配空间
result[0]=1; //从1开始乘
digit=1; //位数从第一位开始
for(i=2;i<=n;i++)
{
int jin=0;
for(j=0;j<digit;j++)
{
temp=result[j]*i+jin; //将一个数的每一位数都分别乘以i
result[j]=temp%10; //将一个数的每一位数利用数组进行储存
jin=temp/10;
}
while(jin!=0)
{
result[digit++]=jin%10;
jin/=10;
}
}
for(i=digit-1;i>=0;i--) //输出结果
{
cout<<result[i];
}
cout<<endl;
char flag2;
cout<<"是否继续运算(Y/N): ";
cin>>flag2;
if(flag2=='n'||flag2=='N')
{
cout<<endl;
cout<<"感谢使用!\n";
system("pause");
break;
}
}
return 0;
}
03-09
3320
03-07
1556