第一次写高精度,求调
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 50 + 10;
const int maxa = 3e3 + 10;
int n, m;
struct haa{
int len;
int s[maxa];
haa() {
len = 0;
memset(s, 0, sizeof s);
}
haa(int a){
len = 0;
while(a){
s[++len] = a % 10;
a /= 10;
}
}
haa operator + (const haa &b) const{
haa c;
c.len = max(len, b.len) + 1;
for(int i = 1; i <= c.len; ++i){
c.s[i] += s[i] + b.s[i];
c.s[i + 1] = c.s[i] / 10;
c.s[i] %= 10;
}
if(!c.s[c.len]) --c.len;
return c;
}
haa operator * (const haa &b) const {
haa c;
c.len = len * b.len;
for(int i = 1; i <= len; ++i){
for(int j = 1; j <= b.len; ++j){
c.s[i + j - 1] += s[i] * b.s[j];
c.s[i + j] += c.s[i + j - 1] / 10;
c.s[i + j - 1] %= 10;
}
}
while(!c.s[c.len] && c.len) --c.len;
return c;
}
} dp[maxn][maxn];
void sol() {
scanf("%d%d", &m, &n);
dp[0][0] = haa{1};
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
dp[i][j] = dp[i - 1][j - 1] + dp[i][j - 1] * haa(i);
haa a = dp[n][m];
if(a.len == 0) printf("0\n");
for(int i = a.len; i; --i)
printf("%d\n", a.s[i]);
}
int main() {
sol();
return 0;
}