![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Witaliy |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Мужской Реальное имя: Witaliy Репутация: ![]() ![]() ![]() |
Нужно найти элемент с номер N (1 <= N <= 907) строки. Строка будуеться так: до конца строки последовательно дописывается сдедуеще число Фибоначчи. Получаем:
1123581321... Например: 6 Выходные даные : 8 Ещё 1 Выход: 1 мой код: {$n+} Но он хорошо не работает. Спасибо. |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Но он хорошо не работает. Для решения этой задачи не надо ни массивов, ничего подобного... Все, что надо - это находить очередное число Фибоначчи, и вычислять его длину (Сколько цифр оно содержит. Напиши для этого функцию). Вычислил, если длина меньше N, значит N уменьшаешь на эту величину, если нет, то значит ты добрался до числа, которое содержит искомую цифру. ТОЛЬКО его переводи в строку (а можно и без этого обойтись), и находи N-ый элемент строки. Особые случаи (N=1 и N=2) обрабатываются отдельно.P.S. Похоже, что встроенных целочисленных типов, способных работать с такими значениями, в Турбо-Паскале нет... Так что, без длинной арифметики не обойтись. |
Гость |
![]()
Сообщение
#3
|
Гость ![]() |
Мне кажеться, что extended подойдёт, так как n <= 907.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Extended? Ну, давай посмотрим... Можно уточнить, при использовании Extended, какое будет число Фибоначчи №82? Тебе придется его вычислить, даже 90-ое придется вычислять при N = 900, например. Но... Уже в 82-м Extended дает ошибку (вычислены числа Фибоначчи с номерами от 75 до 84 и использованием типов QWord и Extended):
75 5527939700884757 5527939700884757 |
Witaliy |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Мужской Реальное имя: Witaliy Репутация: ![]() ![]() ![]() |
Понятно, всё сделал, сдал (использовал int64)
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
int64 - тоже не панацея... Для 90-го числа Фибоначчи он уже переполняется, и выдает отрицательное значение. Даже положительного QWord-а хватает только на 91 число. А если больше понадобится при N = 907? Будет глючить...
|
Witaliy |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 43 Пол: Мужской Реальное имя: Witaliy Репутация: ![]() ![]() ![]() |
Ну да, для таких случаев надо долгую арифметику делать, но обошолся и без
![]() |
TarasBer |
![]()
Сообщение
#8
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
int64 - тоже не панацея... Для 90-го числа Фибоначчи он уже переполняется, и выдает отрицательное значение. Даже положительного QWord-а хватает только на 91 число. А если больше понадобится при N = 907? Будет глючить... Там надо найти не 907е число, а 907ю цифру в последовательности из чисел Фибоначчи. Так что всё на так страшно. -------------------- |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Ага... Только 907 цифра находится в 92-м числе, если я не ошибаюсь... Так что довольно неприятно может быть...
|
DarkWishmaster |
![]()
Сообщение
#10
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 168 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот способ для получения чисел Фибоначчи, может будет интересно:
|
TarasBer |
![]()
Сообщение
#11
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ты считаешь число Фибоначчи по известной формуле, но возводишь в степень число, известное только до 6 знаков.
Ты уверен, что погрешность не проявится? Кстати, тип longint для данной задачи (из первого сообщения этой темы) бесполезен. -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:22 |