打印第n个斐波纳契数[高达1000位]

时间:2013-10-18 12:42:37

标签: c++ c fibonacci

如何计算 C / C ++ 中的第n个Fibonacci数? Fibonacci数字最多可包含1000位数字。我可以生成最多2 ^ 64(无符号长的)数字。由于这是数字的限制,所以我猜测必须有其他方法来做 - 我不知道。

修改

此外,必须在不使用任何外部库的情况下完成。

2 个答案:

答案 0 :(得分:3)

我会给你一些提示,因为你还没有表明你已经开始了。

千位数很多。比C或C ++中的任何内置数字类型都要多。

解决它的一种方法是使用任意精度的数学库。这将有一些结构,基本上可以为您提供数字中所需的数字。

另一种方法是滚动你自己的缓存和携带:

unsigned short int term1[1024];  // 1024 digits from 0-9
unsigned short int term2[1024];  // and another

unsigned short int sum[1024];    // the sum

addBigNumbers(&term1, &term2, &sum);   // exercise for the reader

我希望addBigNumbers的算法可以这样:

Start at the ones digit (index 0)
Add term1[0] and term2[0]
Replace sum[0] with the right digit of term1[0] + term2[0] (which is ... ?)
Keep track of the carry (how?) and use it in the next iteration (how?)
Repeat for each digit

现在,由于您正在计算Fibonacci序列,因此您将能够重复使用这些大数字来进入序列中的下一个项。你可能会发现不复制它们更快,只是改变哪些是术语,哪一个是你重复调用addBigNumbers的总和。

答案 1 :(得分:1)

您可以尝试将GMP用于任意大整数。