C++长整数奇数
C++ long integer oddities?
当我熟悉C++时,我正在复习一些初学者的算法。已经有一些我不知道从哪里开始修复的错误。
1)下面给了我在fib()
函数返回其结果时出现的seg错误。编辑:输入>= 9
#include <iostream>
using namespace std;
int fib(int n) {
int fibs[] = {1, 1}; // dynamic array
int i = 2; // start at 3rd element
while(i < n) {
fibs[i] = fibs[i-2] + fibs[i-1];
cout << "DEBUG: fibs[" << i << "] = " << fibs[i] << endl;
i = i+1;
}
cout << "about to return to main()" << endl;
return fibs[n-1];
}
int main() {
cout << "n================= Hello cruel world =================" << endl;
cout << "Enter a number: ";
int x;
cin >> x;
cout << "fib(" << x << ") = " << fib(x) << endl;
cout << "================ Goodbye cruel world ================n" << endl;
return 0;
}
否则,代码工作正常,数字正确找到。但是 2) 当我更改函数以支持长整数时,它开始表现得很奇怪:
#include <iostream>
using namespace std;
long fib(int n) {
long fibs[] = {1L, 1L}; // dynamic array
int i = 2; // start at 3rd element
while(i < n) {
fibs[i] = fibs[i-2] + fibs[i-1];
cout << "DEBUG: fibs[" << i << "] = " << fibs[i] << endl;
i = i+1;
}
cout << "about to return to main()" << endl;
return fibs[n-1];
}
int main() {
cout << "n================= Hello cruel world =================" << endl;
cout << "Enter a number: ";
int x;
cin >> x;
cout << "fib(" << x << ") = " << fib(x) << endl;
cout << "================ Goodbye cruel world ================n" << endl;
return 0;
}
输出:
================= Hello cruel world =================
Enter a number: 7
DEBUG: fibs[2] = 2
DEBUG: fibs[0] = 1
DEBUG: fibs[1] = 30071067265
DEBUG: fibs[2] = 30071067266
DEBUG: fibs[14] = 0
about to return to main()
fib(7) = 140733637791872
================ Goodbye cruel world ================
这对我来说没有任何意义。感谢您的任何帮助。
int fibs[] = {1, 1};
相当于:
int fibs[2] = {1, 1};
换句话说,数组fibs
(在两个程序中)只有两个元素,如果n
大于 1
,则访问fibs[n]
是非法的。
in
long fibs[] = {1L, 1L};
[]
并不意味着"尽可能大",而是意味着"计算初始值设定项的数量"。 它与
long fibs[2] = { 1L, 1L };
和评论
// dynamic array
完全是错误的。
其他答案解释了问题所在。要修复它,您可以将fibs
声明为向量:
vector<int> fibs(n, 1);
这将构造一个 n 个整数的向量并将它们全部初始化为 1。替换那一行代码应该是你所需要的!
是的,它会失败,因为 fibs[2] 不存在!
这绝不是动态数组。它的数组 2 长
long fibs[] = {1L, 1L}; // dynamic array
相关文章:
- C++长双大"safe"整数
- 如何将argv字符串更改为大数字的长整数
- 涡轮增压C++结果无法与长整数
- 长整数的意外模仿行为
- 有符号长整数的含义
- 如何在 c++ 中解释对长整数的操作
- 垃圾价值通过,同时总结一系列长整数
- 长整数不适用于 8 的幂C++
- 从文件到短 /长整数读取字节
- C++长整数奇数
- 给定一个n位数的长整数,如何访问其部分
- 将长整数转换为字符数组的最安全方法是什么
- 使用构造函数c++将一个长整数转换为类对象
- 将一个长字符串除以一个长整数
- 无法从嵌入式Python返回长整数到c++
- 如何得到长整数的两个组成部分
- 如何将长整数和/或无符号整数传递给 MPI 参数
- C++ 获取从 0 到最大长整数的随机数
- 将长整数秒转换为双精度浮点值
- 这是获取数字字符列表并使用它们创建长整数的有效方法吗