学过C语言的同学都知道,C语言能表示最大的数就是long double了,但是就算是这样一个数也最多能计算170及以下的阶乘,而对于170以上的大数阶乘却无法用来表示。
因此下面介绍一种来计算大数阶乘的方法。
#include <stdio.h>
void Factorial(int n);//声明函数Factorial
int main()//主函数,输入n的值
{
int n;
scanf("%d",&n);
Factorial(n);//把n的值传给函数Factorial
return 0;
}
void Factorial(int n)//定义函数Factorial
{
int i,j;//定义循环变量
int temp;//定义中间结果变量
int carry;//定义进位数变量
int len=1;//定义结果长度变量
int a[10000]={0};//定义结果数组
a[0]=1;//初始结果为1
for (i=2;i<=n;i++)//循环n次,求n的阶乘
{
carry=0;//使每次进位数为零
for (j=0;j<len;j++)//保存每一位数字并判断结果是否需要增长
{
temp=a[j]*i+carry;//计算中间结果
a[j]=temp%10;//保存每一位数字,从后往前
carry=temp/10;//计算进位数
if (j>=len-1 && carry>0)//判断结果是否需要增长
{
len++;
}
}
}
for (i=len-1;i>=0;i--)//输出最终结果
{
printf("%d",a[i]);
}
}
下面是1000阶乘的运行结果: