1、直接进行整型大数之间的乘法很容易导致数据存储溢出,可以采用数组存储计算得到的每一位
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int a[100], k=0, i, j; //定义相关变量,数组
while(1) //自行判断决定循环执行次数
{
if(n==0)
break;
printf("请输入要求的阶乘的数、输入0结束:");
scanf("%d",&n); //输入阶乘数n
printf(" %d!=",n);
for(i=0; i<100; i++) //运用循环语句对数组各元素进行初始化为0
a[i]=0;
a[0]=1; //对数组首元素初始化为1
for(i=2;i<=n;i++)
{
for(j=0;j<=k;j++)
a[j]=a[j]*i; //相邻关系的数相乘
k=k+2;
for(j=0;j<k;j++)
if(a[j]>9) //限制范围,以进位为基准
{
a[j+1]=a[j+1]+a[j]/10; //按阶乘要求改变符合条件的数组元素的值
a[j]%=10; //控制a[j]的数值范围,避免过大,影响循环条件语句的再次执行
}
while(a[k]==0) //判断数组元素是否为0并控制K的范围
k--;
}
for(i=k; i>=0; i--)//利用循环语句,逐个将对应储存阶乘结果的数组元素输出
printf("%d",a[i]);
printf("\n");
}
return 0;
}