社区讨论

高精,10pts,求助(

P1655小朋友的球参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo2i8ydu
此快照首次捕获于
2023/10/23 14:16
2 年前
此快照最后确认于
2023/10/23 14:16
2 年前
查看原帖
rt.\text{rt.}
CPP
#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;
}


回复

0 条回复,欢迎继续交流。

正在加载回复...