Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打印第n个斐波那契数[最多1000位]_C++_C_Fibonacci - Fatal编程技术网

C++ 打印第n个斐波那契数[最多1000位]

C++ 打印第n个斐波那契数[最多1000位],c++,c,fibonacci,C++,C,Fibonacci,在C/C++中如何计算第n个斐波那契数?斐波那契数最多可包含1000位数字。我最多可以生成2^64(无符号长)的数字。因为这是数字的极限,所以我猜必须有其他的方法来做——我不知道 编辑: 此外,它必须在不使用任何外部库的情况下完成。您可以尝试使用任意大的整数。我将给出一些提示,因为您尚未表示已经开始使用 一千位数是很多。比C或C++中任何内置的数字类型都多。 解决这个问题的一种方法是使用任意精度的数学库。这将有结构,将给你基本上一样多的数字,你想在你的数字 另一种方法是滚动您自己的缓存并携带:

C/C++中如何计算第n个斐波那契数?斐波那契数最多可包含1000位数字。我最多可以生成2^64(无符号长)的数字。因为这是数字的极限,所以我猜必须有其他的方法来做——我不知道

编辑:


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

您可以尝试使用任意大的整数。

我将给出一些提示,因为您尚未表示已经开始使用

一千位数是很多。比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

现在,因为你在计算一个斐波那契序列,你将能够重复使用这些大的数字来得到序列中的下一项。您可能会发现,在重复调用
addBigNumbers
时,不复制它们,而只是更改哪些是术语,哪些是总和会更快

你已经尝试过什么?使用BigInt库?看看你遇到了什么问题?寻找解决方案不是个好主意。这违反了他们的政策。@segfult编辑了这个问题。我现在已经更新了这个问题。它必须在不使用任何外部库的情况下完成,所以在完成这个add函数之后,我应用了基本的斐波那契公式:a=1,b=1;a+=b;b+=a?更像是:a=1,b=1,c=a+b,a'=b+c,b'=c+a',等等@John:unsigned int,在其中存储一个数字
char
更合适,尽管我可能会尝试将其减半;-)@Jongware绝对正确,如果我实施它,我也会这么做。如果C或C++有一个名为字节> />代码的类型,我会在心跳中使用它。但出于教学目的,我觉得使用
无符号短int
比需要解释的更清楚:“您实际上存储的是值为0的
char
,而不是字符“0”……但是如果需要,您可以存储字符,您只需记住从ASCII值中减去48即可获得实际数字……”明白我的意思吗?:)是的,我在浪费空间,但如果他/她需要,我会让OP优化。:)