![]() |
|
Модераторы: bsa |
![]()
|
|
| Rubio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.8.2012 Репутация: нет Всего: нет |
45 и 46 чичла находит правильно а вот 47 выдает -1323752223, это притом что тип беззнаковый, не могу понять почему так, тем более что это упражнение из книги и там нормально находит и 100 число.
Модератор: не забываем пользоваться кнопочкой "Код" |
|||
|
||||
| disputant |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 28.11.2011 Репутация: нет Всего: 3 |
1. Возвращаете-то вы int, о какой уж тут беззнаковости говорить...
2. + переполнение... 3. 100-е число Фибоначчи равно 354224848179261915075, а максимум 64-битного беззнакового - 18446744073709551615. Так что что-то не очень версится в просто так, без ухищрений вычисленное сотое число Фибоначчи... Это сообщение отредактировал(а) disputant - 23.8.2012, 17:45 |
|||
|
||||
| Rubio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 8.8.2012 Репутация: нет Всего: нет |
Спасибо за ответ, глупая ошибка, значит 100 число с unsigned int неправильно выдаст? |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
> значит 100 число с unsigned int неправильно выдаст?
> 100-е число Фибоначчи равно 354224848179261915075 Ты бы лучше спросил disputant как он это посчитал Вики не в счёт -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
Ну так C++ - не единственный язык.
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Можно заменить int на double - для больших чисел результат будет хотя и приближённый, но правильный, отрицательных чисел не будет. Но при очень больших n тоже будет переполнение.
|
|||
|
||||
| maxi2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Ну а как найти числа фибоначчи на некотором интервале [m;n]. Это для меня несколько затруднительная задача. Ведь так надо сперва найти первый элемент фибоначчи. А как это сделать? То есть я так понимаю что надо использовать цикл for (i=M; i<N;i++) и если встречается первое число фибонач. надо запомнить его и выходит из цыкла но тогда такой алгоритм должен выглядять for(i=m; i<n; i++) if (i=fibo(j)) {f1=i} break; так тогда еще надо цыкл и для j. Вообщем тогда выходит что и последний элемент фибон. из интервала тоже надо находит. То есть надо как то взаимосвязать i и j.
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
||||
|
||||
| maxi2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Ой не думаю что там аж такие формулы применяются. Тем более хотел бы увидеть формулу бине на примере алгоритма. В общем то проблема в том что например надо k-значные числа вывести. Например од милиона до 10 млн. Для чего тогда проходить цыкл от 0 до 1млн. Хотя если применять рекуренцию то она и так очень большые расчеты делает начиная с наименьшых ибо надо знать значение предыдущих. В моем задание стояла задача найти наиболее эфективный метод. А рекурсия это вряд ли. И еще цыкл до числа m. Знаю есть формула где как раз числа добавляются в сравнение с предыдущим уровнем. Но полюбому надо знать первое число в интервале и потом от него отталкиватся и уже потом проверять меньше ли следующи числа фибоначчи конца интервала. Хотя кончено интегви может быть и 17-19, и 173-284, и 10000-200000. Ну полюбому число m как то связано с предыдущим числом фибоначчи. Да и каждое такое число имеет свои номер в порядке этих чисел.
|
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
а, так нужно не n-e число, а число из интервала... я не понял сразу
просто последовательно рассчитывать, типа
если надо считать числа не по порядковому номеру, а в указанном интервале, то переполнение не имеет значения: если числа, определяющие границы интервала, представимы в компьютере, то и при расчете переполнения не будет это алгоритм (логарифмической сложности) возведения матрицы 2x2 в степень. тут его смысла использовать нет, т.к. нужно не одно число, а последовательность Это сообщение отредактировал(а) baldina - 23.10.2013, 00:04 |
|||
|
||||
| feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Может случиться так, что первое же число Фибоначчи после m вызовет переполнение, тогда цикл пойдёт по-новой... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
Может случиться и так, что первое же число Фибоначчи после n вызовет переполнение)))) Добавлено через 7 минут и 10 секунд если заботиться о переполнении, можно применять проверку вида f0/2+f1/2 < m/2-2 |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 4 Всего: 49 |
Это не слишком сильно усложняет задачу. Из той же формулы Бине следует, что для подсчета n-ого числа Фибоначчи достаточно просто взять целую часть от f^n/sqrt(5), где f=(1+sqrt(5))/2. Соответственно, если есть нижняя граница интервала x, то номер первого числа, попадающего в интервал, считается как n=log(sqrt(5)*x)/log(f)+1. С верхней границей ситуация аналогична. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
это её меняет довольно трудоёмко при большом n. даже используя эффективный метод O(logN) при расчете N чисел даст O(NlogN) против O(N) последовательного сложения Добавлено через 4 минуты и 3 секунды
да, я тоже подумал об этом. использовать разные методы для нахождения первого числа в диапазоне и последующих ТС'у имхо сложновато |
|||
|
||||
| maxi2 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 8.5.2012 Репутация: 1 Всего: 1 |
Такое условие на фирме мне задавали. Сперва интерва потом k значомкз число. Я так понял в последнем варианте от число от 1 и (k-1) нулей до 1 и k нулей. Но снова таки числом это трудно задать. Потому надо было парсить кажется toChаrArray проверять равно ли количество знаков числу k. Но цыкл фибоначчи начинался от i=0. Тогда наверное надо было применять цыкл while (i) в конце блока его увеличивать на 1 и если число фибоначчи было бы k+1 значное тогда выходить из цыкла. Через брейк. Ну то что я написал о взаимосвязи числа m и числа фибоначчи перед ним я имел ввиду что это число q должно быть как минимум не в два рады меньше m. Может есть какая то формула. Например для 10 это число 8, для 20-13, 100-79. Как и зависимость числа фибон. от порядкового номера i.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |