KoroCapsaNt @ 2024-11-14 21:37:19
只能拿到第一个测试点的分,第二个测试点本机结果与答案一样,代入其他的n本机结果和计算器一样
#include <bits/stdc++.h>
using namespace std;
int a[5],b[505],b1[505],c[505];
int n,p,pc=1,co=1;
int num(){ //获取阶乘长度
int re;
for(int k=1;k<=100;k++){
if(b1[k]!=0)re=k;
}
return re;
}
int main(){
cin>>n;
b[1]=1;
for(int i=1;i<=n;i++){
a[0]=i%10;
a[1]=i/10;
for(int j=0;j<=1;j++){
for(p=1;p<=pc;p++){ //计算第i个阶乘
b1[p+j]+=b[p]*a[j];
b1[p+j+1]+=b1[p+j]/10;
b1[p+j]%=10;
}
pc=num();
}
for(int j=1;j<=pc;j++){ //计算前i个和
c[j]+=b1[j];
c[j+1]+=c[j]/10;
c[j]%=10;
}
for(int j=1;j<=pc;j++){ //保存第i个阶乘
b[j]=b1[j];
b1[j]=0;
}
}
bool signal=0;
for(int i=pc;i>=1;i--){
if(c[i]==0&&!signal){ //除0
continue;
}
cout<<c[i];
signal=1;
}
return 0;
}
by caizihang @ 2025-01-04 09:50:22
孩子,要用高精度!