| 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 | |
|
Помогаю со студенческими работами здесь
1180
Набор задачь для тренировки и улучшения понимания программирования Проверить на правильность и закомментировать весь код для лучшего понимания Нужны задачи для тренировки
Нужны задачи для тренировки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|