********** for n< = 10 **********
某些输出甚至可能超出64位整数的范围。 如何找到由以下关系定义的系列之和
T(n + 2)=(T(n + 1)) 2 + T(n)
其中 T(0)= 0 且 T(1)= 1
*是的它是t(n + 1)平方,,,我的问题是如何存储大数字,如计算T(12)并尝试存储结果,它的结果超出了long long int的范围
答案 0 :(得分:2)
在64位计算机上使用gcc时,如果128位就足够了:
typedef unsigned int uint128_t __attribute__((mode(TI)));
uint128_t T (int nr) {
uint128_t t0=0,t1=1,t2,sum = 0;
while (nr--) {
t2 = t1*t1 + t0;
t0 = t1;
t1 = t2;
sum += t2;
}
return sum;
}
答案 1 :(得分:0)
您需要一个支持任意精度数字的库,例如GMP:https://gmplib.org/
答案 2 :(得分:0)
递归解决方案:
some_big_int_type T(int N)
{
if (N == 0)
return 0;
if (N == 1)
return 1;
some_big_int_type Tpow2 = T(N - 1);
return Tpow2 * Tpow2 + T(N - 2);
}
big_type_int
可能是uint128_t
作为Ctx回答。