Проверить, является ли число числом Фибоначи

Помогите с программой
Является ли число вводимое с клавиатуры, числом Фибоначчи

В смысле не является ли введенное число одним из чисел этой последовательности 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... ?

Один из вариантов решения...

#include <iostream>

using namespace std;

int main()
{
    double x;
    int i,y,z,b;
    bool q;
    cout << "Vvedite chislo:" << endl;
    cin >> x;
    y = z = b = 1;
    q = 0;

    for (i = 1; i < x; i++)
    {   z = y; 
        y = b;
        b = z + y;
        if (b == x)  { q = 1; }
    }
    if (q) {cout << x << " eto chislo fib-chi." << endl; } 
        else {cout << x << " ne chislo fib-chi" << endl; };
    system ("pause");
    return 0;
}

n-ое число Фибоначи можно найти за формулой
F(n) = (a^n-b^n)/sqrt(5)
a^n — a в степени n
a = (1+sqrt(5))/2
b = (1-sqrt(5))/2
http://en.wikipedia.org/wiki/Fibonacci_number
Просто перебираешь числа, пока i-ое число Фибоначи не будет равно данному числу или не будет больше него
Чтобы избежать неточностей в связи с исчислением корня квадратного от пяти, можно использовать функцию округления

/*While24. Дано целое число N (> 1).
Последовательность чисел Фибоначчи FK определяется следующим образом:
F1 = 1, F2 = 1, FK = FK−2 + FK−1, K = 3, 4, ... .
Проверить, является ли число N числом Фибоначчи.
Если является, то вывести TRUE, если нет — вывести FALSE.*/

#include <iostream>
using namespace std;

int main() {
    setlocale(LC_ALL, "Rus");

    unsigned n,f=0,f1=1,f2=1;

    cout << "Введите целое положительное число ( >1)\n";
    cin >> n;

    while(f<n) {
        f=f2+f1;
        f2=f1;
        f1=f;
    }

    cout.setf(ios_base::boolalpha);
    cout << "Утверждение, что число " << n << " является числом Фибоначчи, - это ";
    cout << (f==n) << endl;
    system("pause");
    return 0;
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.