结构体重载高精度求调
  • 板块P3904 三只小猪
  • 楼主Rosick
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/13 19:17
  • 上次更新2024/9/13 22:36:49
查看原帖
结构体重载高精度求调
773042
Rosick楼主2024/9/13 19:17

第一次写高精度,求调

#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;
}
2024/9/13 19:17
加载中...