fibonacci序列溢出,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
- 我们可以将值存储在动态创建的结构中,例如作为链表(如果我们想要存储所有斐波那契数)或
- 我们可以使用三个字符串数组来保存sum和temp值来打印它,这将解决你的问题。
请参考
打印第n个斐波那契数[最多1000位]
相关文章:
- 'short int'持有的值溢出,但"自动"不会溢出?
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 大于65535的C++数组[size]引发不一致的溢出
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- C++中无符号字符溢出
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- 整数溢出,最大值为 pow(10,19)
- 获取隐式转换溢出从无符号到已签名的警告
- 使用 strcat 获取缓冲区溢出错误
- LeetCode 1:两和 - 地址清理器:堆缓冲区溢出地址
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- C++ 对象数组堆栈溢出
- 使用提升::lexical_cast捕获溢出
- C++ Unordered_set功能中的溢出
- 自定义排序函数中的堆溢出
- 使用向量的缓冲区溢出
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 如何修复此特征矩阵反演溢出错误?
- 自定义 std::fstream,std::filebuf 的溢出和下溢函数未为每个字符调用