用c++写一个高精度求阿克曼函数
时间: 2023-08-04 14:12:44 浏览: 101
好的,下面是一个简单的高精度计算阿克曼函数的 C++ 代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 高精度加法
vector<int> add(vector<int>& a, vector<int>& b) {
vector<int> res;
int carry = 0;
for (int i = 0; i < a.size() || i < b.size(); i++) {
if (i < a.size()) carry += a[i];
if (i < b.size()) carry += b[i];
res.push_back(carry % 10);
carry /= 10;
}
if (carry) res.push_back(carry);
return res;
}
// 高精度乘法
vector<int> multiply(vector<int>& a, int b) {
vector<int> res;
int carry = 0;
for (int i = 0; i < a.size(); i++) {
carry += a[i] * b;
res.push_back(carry % 10);
carry /= 10;
}
if (carry) res.push_back(carry);
return res;
}
// 高精度阿克曼函数
vector<int> ack(int m, int n) {
if (m == 0) {
return {n + 1};
} else if (n == 0) {
vector<int> tmp = {m};
return ack(m - 1, 1);
} else {
vector<int> tmp = ack(m, n - 1);
return ack(m - 1, tmp[0]);
}
}
int main() {
int m, n;
cin >> m >> n;
vector<int> res = ack(m, n);
for (int i = res.size() - 1; i >= 0; i--) {
cout << res[i];
}
cout << endl;
return 0;
}
```
这里采用了 vector 存储高精度数,使用 add 和 multiply 函数实现高精度加法和乘法,ack 函数实现阿克曼函数的高精度计算。
需要注意的是,在计算 ack(m, n - 1) 的时候,需要将 ack(m, n - 1) 的结果存储到一个临时的 vector 中,然后返回 ack(m - 1, tmp[0]),即返回 tmp[0] 的阿克曼函数。
阅读全文