|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
Длинная арифметика: сложение и умножение чисел25.09.2012, 23:03. Показов 15706. Ответов 38
Метки нет (Все метки)
Нужно реализовать сложение и умножение больших чисел.
Есть идея, необходима помощь в реализации на C++. Собственно, идеи такие... Сумма: берём 2 массива, записываем их в строки, затем добавляем к меньшему числу нули так, чтоб их длина стала одинаковой. Затем, начиная с последнего элемента каждого массива, поэлементно суммируем элементы и остаток деления этой суммы на 10 записываем в начало новой строки. Если результат целочисленного деления суммы на 10 больше 0, то к следующему остатку предварительно прибавляем этот результат. И так до начала массива. Произведение: берём последний элемент меньшего массива и умножаем поэлементно на больший массив, с делением на 10 (как в предыдущем пункте) и получаем новый массив. Далее с предпоследним элементом делаем тоже самое, затем в конце приписываем к нему '0' и производим сумму последних. Повторяем до тех пор, пока не достигнем начало меньшего массива. Вот, что я пока написал. Понимаю, что бред, но может его можно исправить. Помогите, пожалуйста, очень срочно нужно ![]() код
0
|
||||||
| 25.09.2012, 23:03 | |
|
Ответы с готовыми решениями:
38
Длинная арифметика. Сложение чисел Сложение больших чисел (длинная арифметика) Сложение двух чисел (длинная арифметика) |
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||||||
| 27.09.2012, 09:35 | |||||||||||
|
Зачем мучаться с десятичной системой? Возьмите основание, равное количеству чисел, представимых байтом, а тип элемента байт. Складывать можно так:
Можно даже не делить, а сдвигать, а остаток выделять макросом.
0
|
|||||||||||
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
||
| 27.09.2012, 10:18 | ||
|
основание нужно брать равным степени десятки
0
|
||
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 27.09.2012, 10:25 | |
|
Для этих целей приняты переводы при вводе/выводе.
0
|
|
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
||
| 27.09.2012, 10:41 | ||
|
0
|
||
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 27.09.2012, 10:47 | |
|
С какого перепугу? Арифметика делается во внутреннем представлении и не зависит ни от второго основания, ни от направления перевода.
0
|
|
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
||
| 27.09.2012, 10:52 | ||
|
даже при обратном преобразовании нужно реализовывать сложение, напиши хотя бы алгоритм а?
0
|
||
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 27.09.2012, 11:01 | |
|
Откуда всплыла константа?
0
|
|
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
|
| 27.09.2012, 11:07 | |
|
0
|
|
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||
| 27.09.2012, 11:10 | ||
|
0
|
||
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
||
| 27.09.2012, 11:17 | ||
|
алгоритм перевода плз в студию запихни любой байт, какой удобно, на алгоритм не повлияет ведь?
0
|
||
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 27.09.2012, 11:23 | |
|
Нет, конечно. Речь о том, что мои исходники и формулировки в этой теме учитывают любые нестандарты и даже слухи о том, что пятое поколение будет троичным. Ну так, на всякий случай. А то вдруг ему вообще для контроллера на какой ни будь "левой" архитектуре? Может там байт равен биту, или, наоборот 64-м битам.
Добавлено через 4 минуты Для перевода во внутренне представление, кстати, нужно деление с остатком, а не умножение.
0
|
|
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
|||
| 27.09.2012, 11:30 | |||
|
речь кстати шла о сложении и переводе в пользовательский формат
0
|
|||
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 27.09.2012, 14:18 | |
|
0
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 27.09.2012, 15:37 | |
|
Применение любых оснований счисления для внутреннего представления вроде байта-слова в Си++ сталкивается со следующей проблемой: переполнения. Они никак не ловятся простыми средствами. Или складывать два uint32_t в один uint64_t и смотреть, что там в старшем бите, или ассемблерные вставки. Первое не особо эффективно, второе требует геморроя для того, чтобы оно было переносимо. Для умножения, естессно, только первый вариант, так что без особой разницы.
Как именно там внутри представляется — это дело десятое. Выводить длинные числа в большинстве случаев надо реже, чем производить операции над ними, так что потери при переводе в десятичную систему по крайней мере морально оправданы. Естественно, они будут значительными, потому что это очень много неудобных делений. Если представлять в десятичном виде, то места будет жрать чуть больше, и скорость чуть меньше: надо ж делать лишнее вычитание основания счисления, тогда как в двоичном виде флаг переполнения заполняется автомагически. Именно поэтому и спорно. Вроде как и чуть медленнее десятичное основание, но я бы не сказал, что драматически: вычитание всё же штука быстрая. Правда, при умножении беда — делить на десятичное основание, — да.
0
|
|
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 27.09.2012, 15:47 | |
|
Так ведь сложение то происходит сразу в двойной разрядности.
0
|
|
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
||||||
| 27.09.2012, 23:11 | ||||||
|
vlad_light, немного поправил первые три функции. Вывод смотрится проще (как я раньше-то его не исправил?), конвертеры сразу переворачивают. Т.е. функция inverse больше не нужна.
Кликните здесь для просмотра всего текста
Класс, если упрощенно, это совокупность данных и методов, которые работают с этими данными. Здесь в качестве данных было бы логично сделать массив, который хранит числа. А в качестве методов - арифметические операции над этими массивом. Не надо создавать класс ради того, чтобы создать класс. Задайте сами себе вопрос - какой смысл в классе для длинной арифметики, у которого только 2 доступных метода - ввод и вывод. Назовите класс уже традиционно big_int (BigInt или как больше нравится) и вперед) Советую для начала не лезть в перегрузку операторов. Просто разберитесь, что такое класс.
1
|
||||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||
| 27.09.2012, 23:48 [ТС] | ||
И ещё вопрос: Вы пишете cbegin(), cend(). Чем они отличаются от begin() и end()? И что делает функция std::move?
0
|
||
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|||||
| 27.09.2012, 23:54 | |||||
|
1
|
|||||
|
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 28.09.2012, 15:45 | |
|
Смысл в длинной арифметике появляется, например, при рассчёте перемещений на борту корабля в единой галактической локации. Причём, ещё и с длинно-плавающей запятой, а не в длинно-целой арифметике.
0
|
|
| 28.09.2012, 15:45 | |
|
Длинная арифметика. Умножение двух длинных чисел. Длинная арифметика: умножение двух длинных чисел
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности 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
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|