我的程序计算以下Fibonacci序列:
但很明显,如果我添加数字第77和第78位的最后两位数字应该为1,我无法理解这个问题
long double iterative_fib(int n){
long double firstNumber = 0;
long double secondNumber = 1;
long double thirdNumber = 0;
for (int i = 0;i <n-1;i++)
{
if ( n == 0)
{
cout << "The fibonacci number is: " << n;
}
else
{
thirdNumber = firstNumber + secondNumber;
firstNumber = secondNumber;
secondNumber = thirdNumber;
}
}
return thirdNumber;
}
答案 0 :(得分:4)
通过使用long double
作为累积数据类型,您可以达到类型的精度限制,通常在17 digits左右。
由于斐波纳契数都是正整数,我宁愿使用unsigned long long
来表示整数 - 这对于2^64-1
的有符号整数表示是有利的,即至少19位精度。< / p>
unsigned long long iterative_fib(int n){
unsigned long long firstNumber = 0;
unsigned long long secondNumber = 1;
unsigned long long thirdNumber = 0;
for (int i = 0; i < n-1; i++)
{
thirdNumber = firstNumber + secondNumber;
firstNumber = secondNumber;
secondNumber = thirdNumber;
}
return thirdNumber;
}
返回正确答案14472334024676221
但是,除了19位数之外,您还需要求助于Big Integer representation库,或者自己动手。
答案 1 :(得分:1)
当处理数字序列(如Fibonacci数)时,如果使用某种方法尝试将数字存储在特定类型的序列中,例如long long
或unsigned long long
,最终会变得无法存储大值,因此需要改变策略。在这种情况下,例如,字符串可用于存储大数字的数字,并且您执行的任何操作都必须是数字方式。此外,问题类似于this question here