Ближайшее число Фибоначчи - Pascal
Формулировка задачи:
Задано натуральное число N. Напишите программу, которая находит ближайшее к N число Фибоначчи. Если ближайших чисел несколько, то выведите меньшее из них.
Например:
4 3
34 34
1596 1597
Решение задачи: «Ближайшее число Фибоначчи»
textual
Листинг программы
const ln5d2 = ln(5) / 2; lnfi = ln(1 + sqrt(5)) - ln(2); var n, k, f1, f2: longint; begin readln(n); k := round((ln5d2 + ln(n)) / lnfi); f1 := round(exp((k - 1) * lnfi - ln5d2)); f2 := round(exp(k * lnfi - ln5d2)); if n - f1 > f2 - n then writeln(f2) else writeln(f1) end.
Объяснение кода листинга программы
- Объявляется константа
ln5d2и ей присваивается значение выраженияln(5) / 2 - Объявляется константа
lnfiи ей присваивается значение выраженияln(1 + sqrt(5)) - ln(2) - Объявляются переменные
n,k,f1,f2типа longint - Вводится значение переменной
nс помощью функцииreadln - Вычисляется значение переменной
kпо формулеround((ln5d2 + ln(n)) / lnfi) - Вычисляются значения переменных
f1иf2по формуламround(exp((k - 1) * lnfi - ln5d2))иround(exp(k * lnfi - ln5d2)), соответственно - Происходит проверка условия: если разница между
nиf1больше, чем разница междуf2иn, то выводится значениеf2, иначе выводится значениеf1