解题思路:
void Print_Factorial ( const int N )
{
if(N < 0)
{
printf("Invalid input");
}
else if(N == 0)
{
printf("%d",1);
}
else if(N > 0 && N <= 12)
{
double fact = 1;
double i = 1;
while(i <= N)
{
fact = fact * i;
i++;
}
printf("%.lf",fact);
}
else
{
//当N过大时,几种数据类型都不能满足要求,这时使用数组来存储计算结果
int num[10000] = {0};//初始化一个数组
int c = 0;//进位标志
int r = 0;//代表指向数组最后一个元素的指针
num[0] = 1;
int temp = 0 ;
for(int i = 2; i <= N; i++)
{
//其实就是竖式乘法的模拟过程
for(int j = 0; j <= r; j++)
{
//将数组中的数据和下一个i相乘 加上进位
temp = num[j] * i + c;//计算临时结果
num[j] = temp % 10;//相乘之后num[j]可能会改变 重新计算当前位置的元素值
c = temp / 10;//计算进位
}
//如果最后计算的进位不为0 向前填充
while(c)
{
//依次取余将数字填充
r++;
num[r] = c % 10;
c = c / 10;
}
}
//打印数组 倒着打印
for(int k = r; k >= 0; k--)
{
printf("%d",num[k]);
}
}
}