题目描述

C++ AC代码
#include <stdio.h>
#include <string>
#include <algorithm>
using namespace std;
typedef string Number;
Number Map[105][105];
#define ONE string("1")
#define Rev(a) reverse(a.begin(), a.end())
#define Get(a) ((a) - '0')
int x, y;
Number add(Number a, Number b) // 计算a+b
{
Rev(a), Rev(b);
size_t Size1 = a.size(), Size2 = b.size();
Number ans;
int carry = 0;
for (size_t i = 0; i < Size1 || i < Size2; i++)
{
int addsum = carry;
carry = 0;
if (i < Size1) addsum += Get(a[i]);
if (i < Size2) addsum += Get(b[i]);
if (addsum >= 10) addsum -= 10, carry = 1;
ans.push_back(addsum + '0');
}
if (carry) ans.push_back('1');
Rev(ans);
return ans;
}
int main()
{
scanf("%d%d", &x, &y);
Map[1][1] = ONE;
for (int i = 2; i <= x; i++)
{
Map[i][1] = ONE, Map[i][i] = ONE;
for (int j = 2; j < i; j++)
{
Map[i][j] = add(Map[i - 1][j], Map[i - 1][j - 1]);
}
}
printf("%s", Map[x][y].c_str());
return 0;
}