| 15.07.2010, 05:53 | |
|
Ответы с готовыми решениями:
1272
Элементарные программы, для лучшего понимания языка...
Литература для лучшего понимания сути программирования |
| 25.01.2011, 10:47 | |
|
Не по теме: сдается мне, что это на "длинную арифметику" это не тянет. чтобы последнее число узнать вообще byte хватит наверное. ну а последнее ненулевое может чуток побольше
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|
| 25.01.2011, 10:59 | |
|
no0ker, А реализацию сделаете?
1
|
|
| 25.01.2011, 11:27 | |
|
Не по теме: в данное время на работе. с дежурства приду - напишу. понимаю, что слова без кода - пустое место, поэтому оформляю в оффтопик.
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|
| 25.01.2011, 11:29 | |
|
no0ker, договорились.
1
|
|
| 25.01.2011, 11:39 | |
|
Не по теме: Понятно, что задача на последнее ненулевое число НЕ относится к тем, что решаются в лоб. Но поскольку здесь зацепили long double, то могу сказать, что у long double мантисса составляет 64 бита. Т.е. в пределах 64-битных целых чисел представление long double будет точным (и ничем не отличающимся от unsigned long long). Но бОльшие числа хоть и можно представлять в виде long double, они уже будут НЕ точными (с окроглением и отбрасыванием младших разрядов), а потому великого комбинатора long double никак не спасёт)
1
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|
| 25.01.2011, 11:56 | |
|
1
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
| 25.01.2011, 14:46 | ||||||
4
|
||||||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|
| 25.01.2011, 15:01 | |
|
Mr.X, Извиняюсь, но проверочный сайт закрылся до 1 февраля. Проверить не смогу, но решение у Вас точно как у меня. Поэтому без тестов сообщаю, что Ваш код прошел бы все тесты.
1
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|||||||
| 25.01.2011, 15:55 | |||||||
|
Чтобы не вычислять минимальный модуль вручную, можно еще так сделать:
1
|
|||||||
|
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
|
||||||
| 25.01.2011, 17:28 | ||||||
|
может быть вот так..
Не по теме: =( по моему мое "решение" отнюдь не оригинально..
1
|
||||||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|
| 25.01.2011, 17:39 | |
|
no0ker, Я уже писал что проверить не смогу, но на 100% уверен, что Ваше решение прошло бы все тесты.
2
|
|
|
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
|
|
| 25.01.2011, 18:19 | |
|
а можно один вопрос?
очевидно, что последнюю цифру в произведении многозначных чисел можно узнать легко. например, *****4 х ********3 = **********2 (в таком случае и byte хватит) но если нужна последняя ненулевая цифра. если мы будем хранить в процессе умножения лишь последнюю цифру, можем попасть впросак. например, **********2 х *********5 = ******?0 и при дальнейших вычислениях хранить 0 просто глупо. теперь вопрос - сколько последних цифр нужно хранить. может быть 2. или 3. или 4. или 5. или больше. честно говоря,в математике я не силен. поэтому просто взял онлайн генератор факториалов. и опытным путем пришел к 5. =) может быть кто то может толково объяснить этот момент - почему именно 5 цифр необходимо хранить?
0
|
|
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
||||||
| 25.01.2011, 19:21 | ||||||
|
no0ker, так по уму писать надо:
5 цифр достаточно хранить при таких ограничениях на N. Если бы было ограничение до 10^9, например, куда больше цифр хранить пришлось бы.
0
|
||||||
|
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
|
|
| 25.01.2011, 19:40 | |
|
Хохол, не могли вы бы пояснить? я использовал указатели и передавал в функцию адрес переменной. вы предлагаете использовать ссылки?
у меня такое ощущение, что если бы было ограничение 99 - нужно было бы хранить 3 цифры. а 999 - 4 цифры. =) Добавлено через 3 минуты и в чем недостатки моего метода? в том что нужно писать '*' постоянно?
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|||||||||
| 25.01.2011, 20:11 | |||||||||
|
Я кстати также хочу задать вопрос Mr.X: по какому принципу Вы вычисляли минимальный модуль вручную? Кстати если его и вычислять так, то я бы написал так:
1
|
|||||||||
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
|
| 25.01.2011, 20:26 | |
|
no0ker, ну на C++ же пишете, там принято ссылки для таких целей использовать - просто удобнее. А так никакой разницы, наверняка в одно и то же компилируется.
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 25.01.2011, 23:05 | ||
|
Очевидно, что если в конце числа n нулей, то число 10^n = 2^n * 5^n должно разделиться нацело на эту цифру или ее множитель, и частное уже не должно содержать одновременно двоек и пятерок в качестве простых множителей. При n = 4 такой цифры не существует, так как она должна быть равна как минимум 16, а при n = 3 такая единственная цифра – это 8. Если число равно X = k * 1000, (1) где k – это число без нулей в конце, то при делении на 8 получим: Y = X / 8 = k * 1000 / 8 = k * 125. (2) Очевидно, что это число не будет иметь нулей в конце, если число k нечетное. Итак, число вида Y = k * 125, где k нечетно при умножении на цифру 8 дает число X c тремя нулями в конце. Очевидно, что при таком умножении нам потребуется знать максимальное количество последних цифр числа Y. Из (1) видно, что последняя ненулевая цифра числа X равна последней цифре числа k. Если известны три последние цифры числа Y, т.е. Y % 1000 = (k * 125) % (125 * 8) = (k % 8) * 125, то мы сможем найти k только с точностью по модулю 8, т.е. значения k = 1 и k = 9 мы различить не сможем. Если же известны четыре последние цифры числа Y, т.е. Y % 10000 = (k * 125) % (125 * 80) = (k % 80) * 125, (3) то из (3) получим последнюю цифру p числа k: p = Y % 10000 / 125 % 10. Вывод: достаточно хранить четыре последние ненулевые цифры.
2
|
||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|||
| 26.01.2011, 08:56 | |||
|
Mr.X, Не согласен. По-моему здесь ошибка:
Руководствовался таким фактом:
1
|
|||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 26.01.2011, 11:11 | ||
|
Y % 1000 = (k % 8) * 125 доказывается очень просто. Y % 1000 = p (1) в сущности означает, что Y = 1000 * n + p, где n – некоторое целое число, откуда k * 125 = 1000 * n + p, т.е. k * 125 = 125 * 8 * n + p, откуда k = 8 * n + p / 125, т.е. k % 8 = p / 125, откуда p = (k % 8) * 125. Подставляя в (1), получим Y % 1000 = (k % 8) * 125, что и требовалось доказать. Из правила «произведение двух чисел имеет тот же остаток от деления на m, что и произведение остатков от деления этих чисел на m» следует не Y % 1000 =(k % (125 * 8) ) * 125, как у вас написано, а Y % 1000 = (k * 125) % 1000 = (k % 1000 * 125) % 1000. Непонятно только как вы собираетесь извлекать отсюда последнюю цифру числа k. Например, при k = 1 и при k = 9 Y % 1000 = 125. В своей выкладке я рассчитал достаточное количество цифр, т.е. страхующее нас от наихудшего случая. Разумеется, при каких-то условиях необходимое количество может быть меньше, но это никак не опровергает моих расчетов.
0
|
||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||||
| 26.01.2011, 13:18 | ||||
Я вот еще раз перечитываю пост 1177 и не совсем понимаю, к чему там эти доказательства:
Например очередное число A умножили на 125. В результате получилось число B. Если брать остаток от B всего три цифры, то получится одинаковый остаток если число A заканчивается на 1 или 9. Если к этому, то это ни причем. Нам не нужно знать на какие цифры оканчивалось предыдущее число. Mr.X, Можете привести наглядный пример, объясняющий Ваши вычисления? Например такой (я объясню почему хранить одну последнюю цифру мало): Очередное число получилось 12 (или оканчивается на 12). Нужно умножить на очередное число 5 (или которое оканчивается на 5). Если оставить одну последнюю цифру 2, то в полученном значении последняя ненулевая цифра 1. Если оставить две последних цифры, то в полученном значении последняя ненулевая цифра 6. Как-нибудь так.
1
|
||||
| 26.01.2011, 13:18 | |
|
Набор задачь для тренировки и улучшения понимания программирования Проверить на правильность и закомментировать весь код для лучшего понимания Нужны задачи для тренировки
Нужны задачи для тренировки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
|
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него.
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952
Инструкция внутри.
https:/ / youtu. be/ VpfFZSUDGnQ. . .
|
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|