簡體   English   中英

C ++長整數奇數?

[英]C++ long integer oddities?

在熟悉C ++的過程中,我正在重新研究一些初學者的算法。 我已經不知道從哪里開始修復了一些錯誤。

1)以下是在fib()函數返回其結果時出現的段錯誤。 編輯:輸入> = 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]是非法的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM