求助高精
查看原帖
求助高精
461616
Judgelight楼主2023/1/10 11:34
#include<bits/stdc++.h>
#define int long long
#define N 109
using namespace std;
struct big{
	int len,a[1009];
};
void print(big x){
	for(int i=x.len;i>=1;i--){
		cout<<x.a[i];
	}
	cout<<endl;
}
big f[N][N];
big add(big x,big y){
	big c;
	c.len=0;
	int now=0;
	for(int i=1;i<=max(x.len,y.len);i++){
		int num=now+x.a[i]+y.a[i];
		c.len++;
		c.a[c.len]=num%10;
		now=num/10;
	}
	while(now){
		c.len++;
		c.a[c.len]=now%10;
		now/=10;
	}
	return c;
}
big mul(big x,int y){
	int now=0;
	for(int i=1;i<=x.len;i++){
		int num=x.a[i]*y+now;
		x.a[i]=num%10;
		now=num/10;
	}
	while(now){
		x.len++;
		x.a[x.len]=now%10;
		now/=10;
	}
	return x;
}
int n,m;
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	for(int i=1;i<=100;i++){
		f[i][1].len=1;
		f[i][1].a[1]=1;
	}
    for(int i=2;i<=100;i++){
    	for (int j=1;j<=i;j++){
    		f[i][j]=add(f[i-1][j-1],mul(f[i-1][j],j));
		}
	}
	while(cin>>n>>m){
		if(n<m){
			cout<<0<<endl;
			continue;
		}
		print(f[n][m]);
	}
	return 0;
}
2023/1/10 11:34
加载中...