大数阶乘
每一位中保存一个位数小于十五位的数字 然后模拟小学生算数的过程 需要注意前导零和运算过程中的进位等问题
#include<cstdio>
#include<cstring>
long long ans[3000000];
int cnt;
void mul(int x);
int main()
{
int n;
while(~scanf("%d",&n)) {
// if(n <)
cnt = 1;
ans[0] = 1;
for(int i = 1; i <= n; i ++) {
mul(i);
}
for(int i = cnt-1; i >= 0; i--) {
if(i!=cnt-1)
printf("%15.15lld",ans[i]);
else
printf("%lld",ans[i]);
}
printf("\n");
}
}
void mul(int x) {
long long temp = 0,yu = 0,jin = 0;
for(int i = 0; i < cnt; i ++) {
ans[i] *= (long long )x;
ans[i] += jin;
jin = ans[i]/1000000000000000;
ans[i]%=1000000000000000;
}
if(jin){
while(true) {
ans[cnt] = jin;
jin = ans[cnt]/1000000000000000;
ans[cnt++]%=1000000000000000;
if(!jin)break;
}
}
}