📌  相关文章
📜  如何检查给定数字是否为斐波那契数的C ++程序?(1)

📅  最后修改于: 2023-12-03 15:38:50.713000             🧑  作者: Mango

如何检查给定数字是否为斐波那契数的C ++程序?

斐波那契数列是指每个数字都是前两个数字之和的数列,例如:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...。

在C ++中,我们可以使用以下方法检查一个给定数字是否是斐波那契数。

方法一

第一种方法是使用循环。我们可以使用一个循环来计算斐波那契数列中的数字,直到找到一个大于或等于给定数字的数字。然后检查该数字是否等于给定数字,如果相等,则该数字是斐波那契数。

下面是实现此方法的C ++代码:

#include <iostream>
using namespace std;

bool isFibonacci(int n) {
    int a = 0, b = 1, c = 1;
    while (c < n) {
        c = a + b;
        a = b;
        b = c;
    }
    return (c == n);
}

int main() {
    int num;
    cout << "Enter a Number: ";
    cin >> num;
    if (isFibonacci(num))
        cout << num << " is a Fibonacci number";
    else
        cout << num << " is not a Fibonacci number";
    return 0;
}
方法二

第二种方法是使用数学公式。斐波那契数列中的每个数字可以通过以下公式计算:

$$ F_n = \frac{1}{\sqrt{5}}\Big[\Big(\frac{1+\sqrt{5}}{2}\Big)^n - \Big(\frac{1-\sqrt{5}}{2}\Big)^n\Big] $$

我们只需要检查给定数字是否等于该公式计算出的一个整数就可以判断它是否是斐波那契数。

下面是实现此方法的C ++代码:

#include <iostream>
#include <cmath>
using namespace std;

bool isPerfectSquare(int x) {
    int s = sqrt(x);
    return (s*s == x);
}

bool isFibonacci(int n) {
    return isPerfectSquare(5*n*n + 4) || isPerfectSquare(5*n*n - 4);
}

int main() {
    int num;
    cout << "Enter a Number: ";
    cin >> num;
    if (isFibonacci(num))
        cout << num << " is a Fibonacci number";
    else
        cout << num << " is not a Fibonacci number";
    return 0;
}

以上是两种不同的方法来检查给定数字是否是斐波那契数的C ++程序。您可以根据实际需求选择其中一种方法。