请问输出这个超级大的数要怎么输出啊?题目如下,一个汉诺塔问题,汉诺塔我会写,但是输出就不会了。
代码如下
#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
unsigned long long 最大才20位。 这个应该是22位, 需要做个数字数组存储的大数加法
可以这么弄一下:
其中数组存储的大数加法大致是定义两个加数数组 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