编码过程:
设置一个数组a[100000]来记录结果上每一位上的数据(a[]为全局变量,已经初始化为0)
令a[1]=1,防止相乘时为0,L记录位数;
循环n次,每一轮将a[]上每一位数乘以该阶乘的数字
前一位等于后一位除以10加上它之前的数
后一位等于当前数除以10
如果前一位大于十并且位数大于等于L,开始进位
最后倒序输出
#include <stdio.h>
int a[100000]; //记录结果位数上的数据
int main()
{
int n, l = 1;
scanf("%d", &n);
a[1] = 1; //防止相乘时全部为0
for (int i = 1; i <= n; ++i) //n的阶乘
{
for (int j = 1; j <= l; ++j) //只需要j<=l没有必要写j<=n
{
a[j] = a[j] * i; //每一位都乘以i
a[j] = a[j - 1] / 10 + a[j]; //前一位等于后一位除以10加上它原来的数
a[j - 1] = a[j - 1] % 10; //后一位等于当前数除以10
if (a[j] >= 10 && j >= l) //进位
l++;
}
}
for (int i = l; i >= 1; --i)
printf("%d", a[i]); //倒序输出每一位数
return 0;
}