斐波那契数列溢出,C++
fibonacci sequence overflow, C++
我想打印斐波那契数列中的前 100 个数字。我的程序打印到大约 20 个数字,然后数字变成负数。
有人可以向我解释一下并提供解决方案吗?
谢谢,
/*Fibonacci sequence*/
#include <iostream>
using namespace std;
int main(){
long int i, fib;
int firstNum=0, secondNum=1;
cout << firstNum << endl;
cout << secondNum << endl;
for (i=0; i < 100; i++){
fib = firstNum + secondNum;
firstNum = secondNum;
secondNum = fib;
cout << fib << endl;
}
return 0;
}
您看到的是整数溢出问题。 firstNum 和 secondNum 都不长。
这应该可以解决问题
unsigned long long i, fib;
unsigned long long firstNum=0, secondNum=1;
编辑:
这将帮助您避免在第 20 个数字后溢出,但您的程序仍然会溢出。您可以使用 unsigned long long,您将到达第 100 个序列元素。
好吧,即使 unsigned long long int 超出了更高 fabonacci num(92 以上)的范围,但如果仍然感兴趣,你可以将它们逐位存储在数组中
看到这个
https://docs.google.com/file/d/0BwtP9e5j1RbpSjhvSG4wbkhGcmM/edit
- 或者我们可以将值存储在动态创建的结构中,例如
作为链表(如果我们想存储所有斐波那契数)OR
- 我们可以只使用三个字符串数组来保存 sum 和 temp 值来打印它,这将解决您的问题。
请看这个参考
Print nth Fibonacci number [upto 1000 digits]
我想打印斐波那契数列中的前 100 个数字。我的程序打印到大约 20 个数字,然后数字变成负数。
有人可以向我解释一下并提供解决方案吗?
谢谢,
/*Fibonacci sequence*/
#include <iostream>
using namespace std;
int main(){
long int i, fib;
int firstNum=0, secondNum=1;
cout << firstNum << endl;
cout << secondNum << endl;
for (i=0; i < 100; i++){
fib = firstNum + secondNum;
firstNum = secondNum;
secondNum = fib;
cout << fib << endl;
}
return 0;
}
您看到的是整数溢出问题。 firstNum 和 secondNum 都不长。
这应该可以解决问题
unsigned long long i, fib;
unsigned long long firstNum=0, secondNum=1;
编辑:
这将帮助您避免在第 20 个数字后溢出,但您的程序仍然会溢出。您可以使用 unsigned long long,您将到达第 100 个序列元素。
好吧,即使 unsigned long long int 超出了更高 fabonacci num(92 以上)的范围,但如果仍然感兴趣,你可以将它们逐位存储在数组中
看到这个 https://docs.google.com/file/d/0BwtP9e5j1RbpSjhvSG4wbkhGcmM/edit
- 或者我们可以将值存储在动态创建的结构中,例如 作为链表(如果我们想存储所有斐波那契数)OR
- 我们可以只使用三个字符串数组来保存 sum 和 temp 值来打印它,这将解决您的问题。
请看这个参考
Print nth Fibonacci number [upto 1000 digits]