贼大的大数 一般人都顶不顺 所以数组的一位存8个数
解释都在代码里咯
又修改了一下 time18.12.6
#include<iostream>
#include<cstdio>
#include<cstring>
#define block 100000000//每块大小
using namespace std;
long long a[10000];
int main()
{
int blocknum=0;
//memset(a,0,sizeof(a));
a[0]=1;
int x;
scanf("%d",&x);
for(int i=1;i<=x;i++)
{
int t=0;
for(int j=0;j<=blocknum;j++)//将高精度数分为blocknum+1块
{
a[j]=a[j]*i+t;//此块的值=上次此块的值*阶乘数+(前一块溢出的值==a[j-1]/block)
t=a[j]/block;//此块的值溢出的数值
a[j]%=block;//去掉溢出值之后的的剩余值为此块的真实值
}
if(t>0)//在本块有溢出,所以应该新增块
{
blocknum++;
a[blocknum]=t;//放入溢出值
}
}
printf("%lld",a[blocknum]);
for(int i=blocknum-1;i>=0;i--)
{
printf("%08lld",a[i]);//c格式化输出 补齐前导零
}
printf("\n");
return 0;
}
格式化输出还是很有用的 不要沉迷于流输出