如何输出一个超级大的数

请问输出这个超级大的数要怎么输出啊?题目如下,一个汉诺塔问题,汉诺塔我会写,但是输出就不会了。

img

代码如下

#include <bits/stdc++.h>
using namespace std;
const int kMaxDataLen = 10000;  // 最大数据位数
class BigInt {
 public:
  BigInt() {                        // 初始时赋值为1(f(1)=1)
    memset(data, 0, sizeof(data));  // 数组清零
    data[0] = 1;
    len = 1;
  }
  void Compute() {  // 计算f(n) = 2 * f(n-1) + 1
    int carry = 1;  // 表达式中的加一,同时表示进位
    int sum = 0;
    for (int i = 0; i <= len; i++) {
      sum = data[i] * 2 + carry;
      data[i] = sum % 10;
      carry = sum / 10;
    }
    if (data[len] != 0) {  // 更新数据长度
      len++;
    }
  }
  void Print() {
    for (int i = len - 1; i >= 0; i--) {
      printf("%d", data[i]);
    }
  }

 private:
  uint8_t data[kMaxDataLen];  // 用数组每一位表示大整数的一位
  int len;                    //数据长度
};

int main() {
  BigInt big_number;
  int N;
  cin >> N;
  for (int i = 2; i <= N; i++) {
    big_number.Compute();
  }
  big_number.Print();
}

没有这么大范围的整型,之前看到的是用字符串自定义一个超长数字

unsigned long long

通过数组计算阶乘,输出大数(40000位)。 例如10000!结果长度 length=35660。
源代码:
https://download.csdn.net/download/m0_54619218/87152041
例如10000! 输出
10000
2846259680917054518906413212119868890148051...... 0000000000000000 length=35660

img

unsigned long long 最大才20位。 这个应该是22位, 需要做个数字数组存储的大数加法
可以这么弄一下:

  1. 先弄一个数记录次数 unsigned long long count,
  2. 这个count达到一定的数值比如20位的时候,把这个数做一次大数加法
  3. 最后输出这个大数的值

其中数组存储的大数加法大致是定义两个加数数组 a[100] b[100],
然后a存储第一个加数 a0到a100存储从第1位到第100位, 然后b存储第二个加数 b0到b100存储从第1位到第100位,在相加
网上很多这种例子

参考代码
用递归来写代码,实现的功能是,输入某个正整数 n,输出斐波那契数列中第 n 项的值。

def fib(n):
    if n == 1 or n == 2:
        return 1
    else:
        return fib(n-1) + fib(n-2)

参考【递归:如何计算汉诺塔问题的移动步数?】链接:https://blog.csdn.net/fegus/article/details/127137932

参考一下呢 https://jingyan.baidu.com/article/a3761b2be1e7951577f9aa4b.html