诶我感觉我在刷水题啊
#include <iostream>
#include <cstdio>
#define N 2050
using namespace std;
int n;
struct num{
int d[N],w;
void print() {
for (int i=w;i>=1;i--) printf("%d",d[i]); printf("\n");
}
}D[N],id;
num operator +(num p1,num p2) {
num ret = id; int g = 0;
if (p1.w < p2.w) swap(p1,p2); ret.w = p1.w;
for (int i=1;i<=p1.w;i++) {
ret.d[i] = ( p1.d[i] + p2.d[i] + g ) % 10;
g = ( p1.d[i] + p2.d[i] + g ) / 10;
}
while (g) ret.d[ ++ret.w ] = g % 10 , g /= 10;
return ret;
}
num mul(num p1,int p2) {
num ret = id; ret.w = p1.w; int g = 0;
for (int i=1;i<=p1.w;i++) {
ret.d[i] = ( p1.d[i] * p2 + g ) % 10;
g = ( p1.d[i] * p2 + g ) / 10;
}
while (g) ret.d[ ++ret.w ] = g % 10 , g /= 10;
return ret;
}
int main() {
scanf("%d",&n); if (n == 1) { puts("0"); return 0; }
D[1] = id; D[2].w = D[2].d[1] = 1;
for (int i=3;i<=n;i++) D[i] = mul( (D[i-1]+D[i-2]) , i-1 );
D[n].print();
return 0;
}