|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
||||||
Сложение чисел до определенного разряда29.06.2018, 14:21. Показов 2171. Ответов 9
Метки нет (Все метки)
Я рассчитываю числа Фибоначчи и нужны только первые 9 цифр от каждого числа, то есть все что после 9 цифры числа я не рассчитываю.
Вот мой полурабочий код
Я пробовал увеличить количество нулей в MaxDigit и потом из 329468 числа брать только первые 9 путем деления на 10^(количество добавленных нулей). В таком случае переполнение не успевает добраться до 9 цифры, но это костыльное решение...
0
|
||||||
| 29.06.2018, 14:21 | |
|
Ответы с готовыми решениями:
9
|
|
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
| 29.06.2018, 14:29 | |
|
Простите, а что в Вашем понимании числа Фибоначчи? Примерно 41 число в его последовательности имеет более (или =) 9 цифр. Поясните на конкретных примерах, что Вы делаете.
0
|
|
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 29.06.2018, 14:40 [ТС] | |
|
Числа Фибоначчи это когда каждое следующие число это сумма двух предыдущих. Я начинаю с чисел 1 и 1 как и многие то есть 1 1 2 3 5 8 13 21 ...
Я беру только первые 9 цифр этого числа. Например, когда последовательность доходит до 44 числа в перегрузке оператора происходит вот что 44 701408733 <-- f1 45 113490317(0) <-- f2 if f2 > maxdigit then f1 /= 10; f2 /= 10; f3 = f1 + f2; end if; 46 183631190(3) Под 45 числом я написал псевдокод, мы делим оба слагаемых на 10 если их сумма больше миллиарда и только потом складываем их иначе просто складываем. В скобках отсекаемое число. В этом примере все так как оно должно быть, но на деле числа получаются немного меньше.
0
|
|
|
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
||||||
| 29.06.2018, 14:54 | ||||||
|
Не могу вспомнить автора, но где-то на просторах форума находится. Изменить лишь вывод от .. до
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 29.06.2018, 16:12 [ТС] | |
|
Да библиотеки больших чисел у меня тоже есть. В коде котором я написал выше это упрощенная версия больших чисел, которая в каждой ячейке(элемент массива типа вектор) хранит только число не более чем из 9 цифр и умеет только складывать(для Фибоначчи больше не нужно). Полноценная библиотека будет обсчитывать число целиком, и на языке Perl у меня ушло 10 минут на это. На с++ мое решение работало дольше, и я не стал ждать результата и решил обсчитать только нужные мне 9 чисел.
Добавлено через 57 минут Что-то я теряю при делении на 10 и не знаю как это использовать, компенсировать.
0
|
|
|
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|
| 29.06.2018, 21:26 | |
|
У тебя на 43 числе (70140873 701408733)
Почему-то теряется в "первых 9 цифрах" крайняя 3ка. Хотя цифр всего 9 там, а не больше, а в "последние 9" записывается нормально. Ну а дальше уже от этого начинает плясать всё
0
|
|
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
||||||
| 29.06.2018, 21:48 [ТС] | ||||||
|
Теряется при делении на 10. Я работаю над новым кодом. Идея в том чтобы добавить еще одну ячейку еще для 9 цифр, и того 2 ячейки для первых уже 18 чисел. Я понимаю что они будут плясать пока я не пойму почему а в этом случае пляска по идее не достанет первую ячейку еще очень долго.
Ну а вообще уже не стало для меня секретом что я решаю 104 задачу проекта Эйлера) Я нашел решение на с++ но я не смог вникнуть в суть его работы, особенно как-он складывает и решил переписать эту часть сам, но моих мозгов недостаточно... Прилагаю готовый код. Кликните здесь для просмотра всего текста
// //////////////////////////////////////////////////////// // # Title // Pandigital Fibonacci ends // // # URL // https://projecteuler.net/problem=104 // http://euler.stephan-brumme.com/104/ // // # Problem // The Fibonacci sequence is defined by the recurrence relation: // // `F_n = F_{n-1} + F_{n-2}`, where `F_1 = 1` and `F_2 = 1`. // // It turns out that `F_541`, which contains 113 digits, is the first Fibonacci number for which the last nine digits are 1-9 pandigital (contain all the digits 1 to 9, but not necessarily in order). // And `F_2749`, which contains 575 digits, is the first Fibonacci number for which the first nine digits are 1-9 pandigital. // // Given that `F_k` is the first Fibonacci number for which the first nine digits AND the last nine digits are 1-9 pandigital, find `k`. // // # Solved by // Stephan Brumme // May 2017 // // # Algorithm // My solution is based on a stripped down version of my ''BigNum'' class and stores 9 digits per cell, that's why it's called ''BillionNum'' (because ''MaxDigit = 1000000000'' ==> `10^9`). // It only supports ''operator+=''. // // ''isPandigital(x, digits)'' returns true if ''x'' is ''1..digits''-pandigital, e.g. ''isPandigital(312, 3) == true'' because 312 is 3-pandigital. // The original problem assumes ''digits = 9''. // ''x'' 's digits are chopped off step-by-step and a bitmask tracks which digits we have already seen. // Zero is not part of any pandigital number, not even implicit leading zeros. // // The ''main'' routines analyzes the lower digits first. // Only when they are pandigital then the highest digits are checked, too, because that's bit slower: // I take all digits from the highest cell of my ''BillionNum''. If there are too few digits, all digits in its neighboring cell are included. // We might have too many digits now, therefore I remove the lowest digit until the number of digits is correct. // If these digits are pandigital, then we are done. // // Finding the next Fibonacci number involves ''operator+='' of ''BillionNum''. The default algorithm is: // `F_{next} = F_a + F_b` // `F_a = F_b` // `F_b = F_{next}` // ==> quite a few memory allocations, and many object constructor/destruction will take place behind the curtain. // A simple trick to improve performance is to use these equations instead, which get rid of these "memory/object bookkeeping" effects: // `F_a += F_b` (add in-place) // `F_a <=> F_b` (swap contents of both object, which is technically just swapping two pointers) // // The main performance boost comes from my next trick: // - we check the lowest digit whether they are pandigital // - we check the highest digit whether they are pandigital // - __but we don't care what the other digits are__ // ==> whenever a number exceeds a certain size, I delete digits from the middle // Currently I delete if there are more than 10 cells, which represent `9 x 10 = 90` digits. // There is no special reason why I chose 10, it was the first number that I tried and it worked immediately. // The solution is found 100x faster now ... // // # Alternatives // I saw some people used clever `log` arithmetic to find the highest digits. // This works for the original Fibonacci numbers but not the generalized Fibonacci numbers of the Hackerrank problem. // // # Hackerrank // The user can define `F_1` and `F_2` as well as how many digits should be pandigital.
0
|
||||||
|
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
|
||||||
| 29.06.2018, 22:50 | ||||||
|
Вы бы ещё бином Ньютона применили
держите код:
0
|
||||||
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 30.06.2018, 00:10 [ТС] | |
|
Было бы все так просто) Вот только нужное мне число находиться на 329468 позиции и состоит из 68856 цифр) Видимо нам всем придется пока смириться что мы недостойны того парня который написал код который в моем предыдущем сообщении)
Добавлено через 47 минут Я наконец-то изучил его код. Структура работает так же, как в библиотеке больших чисел, которая у меня уже была. Только он ее упростил. Научил делать только сложение и все. В каждой ячейке(элементе массива) храниться число из 9 цифр. Когда ячеек больше 10, то он рандомно удаляет из середины ячейку, чтобы не считать все число целиком и пляска которая была у меня - не возникает, однако она по-любому, как мне кажется в какой-то ячейке должна быть, но нужные нам ячейки(конец и начало) она не затрагивает. В общем это решение конечно лучше, чем в первом моей сообщении, мне оно кажется более правильным) Но в моем решении из первого сообщения ограничить количество разрядов до 15(что я и сделал ранее) то эта пляска тоже меня не достигает. А искать алгоритм чтобы пляски не было это видимо сложнее, чем сама задача) Если я все верно понял, из того что написал то мое решение на 15% быстрей.
0
|
|
|
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 35
|
|
| 30.06.2018, 01:38 [ТС] | |
|
Кому интересно - прилагаю программу и исходник
0
|
|
| 30.06.2018, 01:38 | |
|
Помогаю со студенческими работами здесь
10
найти сумму цифр второго разряда всех чисел Каждое из двух заданных чисел циклически сдвинуть влево на 2 разряда Умножение чисел начиная с младших разряда множителей со сдвигом суммы частичных произведений вправо Сколько существует шестизначных чисел, если первая цифра разряда может быть нулем, число кратно 4
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|