#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=210,maxnlen=1000+10;
struct number{
int x[maxnlen],len;
number(){
memset(x,0,sizeof(x));
len=0;
}
/*number operator * (number a){
number res;
res.len=len+a.len-1;
for(int i=0;i<len;i++){
for(int j=0;j<a.len-1;j++){
res.x[i+j]=x[i]*a.x[j];
res.x[i+j+1]+=res.x[i+j]/10;
res.x[i+j+1]%=10;
}
}
while(res.x[res.len]){
res.x[res.len+1]=res.x[res.len]/10;
res.x[res.len]%=10;
++res.len;
}
return res;
}*/
number operator * (int b){
number res;
res.len=len;
for(int i=0;i<res.len;i++){
res.x[i]+=x[i]*b;
res.x[i+1]+=res.x[i]/10;
res.x[i]%=10;
}
while(res.x[res.len]){
res.x[res.len+1]+=res.x[res.len]/10;
res.x[res.len]%=10;
++res.len;
}
return res;
}
number operator +(number a){
number res;
res.len=max(len,a.len);
for(int i=0;i<res.len;i++){
res.x[i]+=a.x[i]+x[i];
res.x[i+1]+=res.x[i]/10;
res.x[i]%=10;
}
while(res.x[res.len]){
res.x[res.len+1]+=res.x[res.len]/10;
res.x[res.len]%=10;
++res.len;
}
return res;
}
void print(){
for(int i=len-1;i>=0;i--)printf("%d",x[i]);printf("\n");
}
}dp[maxn];
int main(){
int i,j,k,m,n;
scanf("%d",&n);
dp[0].len=1;dp[0].x[0]=1;
dp[1].len=1;
for(i=2;i<=n;i++){
dp[i]=(dp[i-1]+dp[i-2])*(i-1);
}
dp[n].print();
return 0;
}
高精度和错位排列
最新推荐文章于 2024-08-14 10:45:00 发布