Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
173531 B班陈乐辰 组合数的高精度算法 C++ 无测评数据 0 0 MS 0 KB 1459 2024-08-20 21:16:16

Tests(0/0):


#include <iostream> #include <vector> #include <algorithm> using namespace std; string add(string a, string b) { // 反转从低位开始算起 reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); vector<int> r(max(a.size(), b.size()) + 1, 0); for (int i = 0; i < r.size(); i++) { r[i] += (i < a.size() ? a[i] - '0' : 0) + (i < b.size() ? b[i] - '0' : 0); r[i + 1] += r[i] / 10; r[i] %= 10; } // 将结果转成字符串 string s = ""; for (int i = r.size() - 1; i >= 0; i--) { s += to_string(r[i]); } while (s.size() > 1 && s[0] == '0') { s.erase(0, 1); } return s; } int fm(int m, int n) { if (m <= 1 || n <= 1) { return 1; } else { return fm(m - 1, n) + fm(m, n - 1); } } int main() { int m, n; cin >> m >> n; string a[m + 1][n + 1]; a[1][1] = "1"; for (int k = 3; k <= m + n; k++) { for (int i = 1; i < k; i++) { int j = k - i; if (i <= m && j <= n) { if (i == 1 || j == 1) { a[i][j] = "1"; } else { a[i][j] = add(a[i][j - 1], a[i - 1][j]); } } } } cout << a[m][n] << endl; return 0; }