Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
173606 | A班--林奕朗 | 高精度阶乘 | C++ | 无测评数据 | 0 | 0 MS | 0 KB | 1217 | 2024-08-20 22:03:25 |
#include<iostream> #include<string.h> #include<math.h> #define ip int i=0;i< #define iq ;i++ #define MLEN 1000 using namespace std; int a[2*MLEN+6],sum[2*MLEN+6],tm[2*MLEN+6];int rec[2*MLEN+6],tmp[2*MLEN+6],fact[55][2*MLEN+6]; void Print(int rec[]){ // memset(rec,0,sizeof(int)*MLEN*2); int i=MLEN; while(i>0&&rec[i]==0)i--; for(;i>=0;i--){ cout<<rec[i]; } return ; } void Plus(int num1[],int num2[],int rec[]){ memset(rec,0,sizeof(int)*MLEN*2); for(int i=0;i<=MLEN;i++){ rec[i]+=num1[i]+num2[i]; if(rec[i]>=10){ rec[i+1]++; rec[i]%=10; } } } void Mul(int num1[],int num2[],int rec[]){ memset(rec,0,sizeof(int)*MLEN*2); for(int i=0;i<=MLEN;i++){ for(int j=0;j<=MLEN;j++){ if(i+j+1<=MLEN){ rec[i+j]+=num1[i]*num2[j]; if(rec[i+j]>=10){ rec[i+j+1]+=rec[i+j]/10; rec[i+j]%=10; } } } } } void Cpy(int q1[],int q2[]){ for(int i=0;i<MLEN;i++){ q2[i]=q1[i]; } } void Fact(int n,int rec[]){ memset(rec,0,sizeof(int)*MLEN*2); rec[0]=1; for(int i=1;i<=n;i++){ tm[0]=i%10; tm[1]=i/10; Mul(rec,tm,sum); Cpy(sum,rec); } } int main(){ int n;cin>>n; Fact(n,rec); Print(rec); return 0; }