不会就我一个高精度吧(装X)
2024-07-29 16:37:15
发布于:上海
5阅读
0回复
0点赞
#include<iostream>
#include<cstring>
using namespace std;
int n,a[105],b[105],c[105],f[105];
int len_a=1,len_b=1,len_c=1,len_ans,m=1;
string s;
int main(){
cin>>n;
b[0]=1;//初始化
for(int i=1;i<=n;i++){
len_a=0;
int p=i;
while(p>0) a[len_a++]=p%10,p/=10;
for(int j=0;j<len_a;j++){//算a*b(i*(i-1))的阶乘,即i的阶乘
for(int k=0;k<=len_b;k++){
c[j+k]+=a[j]*b[k];
}
}
for(int j=0;j<len_c;j++){
if(c[j]>9) c[j+1]+=c[j]/10,c[j]%=10;
}//进位
if(c[len_c]) len_c++;//判断最高位是否需要进位
len_ans=len_b,len_b=len_c;
m=max(m,len_c);
//把len_b赋值给len_ans
for(int j=len_c-1;j>=0;j--) b[j]=c[j];//把c数组存进b数组,即存进i的阶乘
len_c=len_a+len_ans;
memset(c,0,sizeof c);//清零c数组,下一个阶乘
for(int j=0;j<m;j++){
f[j]+=b[j];
if(f[j]>9){
f[j+1]+=f[j]/10;
f[j]%=10;
}
}
}
while(!f[m]&&m>0) m--;//去掉前导零
for(int i=m;i>=0;i--) cout<<f[i];//倒序输出
return 0;
}
这里空空如也
有帮助,赞一个