高精,10pts,求助(
查看原帖
高精,10pts,求助(
636358
WindyDay楼主2023/5/30 21:16

rt.\text{rt.}

#include <iostream>
#include <cstring>
using namespace std;

class bigint
{
	public:
		bigint()
		{
			length = 0;
			memset(num, 0, sizeof(num));
		}
		
		int num[1005];
		int length;
		
		int& operator[](unsigned int i)
		{
			return num[i];
		}
		
		bigint operator +(const bigint &a)
		{
			bigint ans;
			int mxl = max(length, a.length);
			for(int i = 1; i <= mxl; i++)
			{
				ans[i] += num[i] + a.num[i];
				if(i == mxl && ans[i] >= 10) mxl++;
				ans[i + 1] += ans[i] / 10;
				ans[i] %= 10;
			}
			ans.length = mxl;
			return ans;
		}
		
		bigint operator *(const int &a)
		{
			bigint ans;
			int mxl = length;
			for(int i = 1; i <= mxl; i++)
			{
				ans[i] += num[i] * a;
				ans[i + 1] += ans[i] / 10;
				ans[i] %= 10;
			}
			
			while(ans.num[mxl + 1] > 0)
			{
				mxl++;
				ans[mxl + 1] = ans[mxl] / 10;
				ans[mxl] %= 10;
			}
			ans.length = mxl;
			return ans;
		}
		
		friend ostream& operator << (ostream& os, const bigint &n)
		{
			for(int i = n.length; i >= 1; i--)
			{
				os << n.num[i];
			}
			os << endl;
			return os;
		}
};

bigint dp[105][105];

int main()
{
	int n, m;
	for(int i = 1; i <= 100; i++)
	{
		for(int j = 1; j <= 100; j++)
		{
			if(j == 1)
			{
				dp[i][j].length = 1;
				dp[i][j].num[1] = 1;
			}
			else
			{
				bigint mul = dp[i - 1][j] * j;
				bigint add = dp[i - 1][j - 1] + mul;
				dp[i][j] = add;
			}
		}
	}
	while(cin >> n >> m)
	{
		cout << dp[n][m];
	}
	return 0;
}


2023/5/30 21:16
加载中...