|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
Длинная арифметика: сложение и умножение чисел25.09.2012, 23:03. Показов 15170. Ответов 38
Метки нет (Все метки)
Нужно реализовать сложение и умножение больших чисел.
Есть идея, необходима помощь в реализации на C++. Собственно, идеи такие... Сумма: берём 2 массива, записываем их в строки, затем добавляем к меньшему числу нули так, чтоб их длина стала одинаковой. Затем, начиная с последнего элемента каждого массива, поэлементно суммируем элементы и остаток деления этой суммы на 10 записываем в начало новой строки. Если результат целочисленного деления суммы на 10 больше 0, то к следующему остатку предварительно прибавляем этот результат. И так до начала массива. Произведение: берём последний элемент меньшего массива и умножаем поэлементно на больший массив, с делением на 10 (как в предыдущем пункте) и получаем новый массив. Далее с предпоследним элементом делаем тоже самое, затем в конце приписываем к нему '0' и производим сумму последних. Повторяем до тех пор, пока не достигнем начало меньшего массива. Вот, что я пока написал. Понимаю, что бред, но может его можно исправить. Помогите, пожалуйста, очень срочно нужно ![]() код
0
|
||||||
| 25.09.2012, 23:03 | |
|
Ответы с готовыми решениями:
38
Длинная арифметика. Сложение чисел Сложение больших чисел (длинная арифметика) Сложение двух чисел (длинная арифметика) |
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
|||||||
| 25.09.2012, 23:20 | |||||||
А если вы имели ввиду умножение и сложение множества различных чисел, тогда да, массивы это то что надо)Уточните условие)
0
|
|||||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|
| 25.09.2012, 23:25 [ТС] | |
|
нужно реализовать сложение и умножение целых чисел, которые не помещаются в long, без помощи посторонних библиотек. Например, программа должна уметь умножать 72643598263458726384578876 на 4092738458273409857238457 и выводить результат на экран.
0
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
| 25.09.2012, 23:28 | |
|
Elfenlide, А если числа содержат по сотне десятичных знаков? Или вы считаете, что таких не бывает в природе? Или ваш код действительно сумеет их сложить? Если ему это и удастся, то оче-е-нь приблизительно. А для исследований в теории чисел такая приблизительность не пройдет.
vlad_light, форум кишит обсуждением работы с большими числами и программами их реализующими. Попробуйте поискать. И Гугл тоже может помочь А идеи ваши на первый взгляд вполне здравые. Удачи!
1
|
|
|
23 / 23 / 11
Регистрация: 15.04.2012
Сообщений: 183
|
||
| 25.09.2012, 23:33 | ||
0
|
||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||
| 25.09.2012, 23:41 | ||
|
0
|
||
|
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
|
|
| 25.09.2012, 23:43 | |
|
vlad_light, гляньте на этот топик.
Теория чисел. ОТФ Там в одном из вложений прячется библиотечка для работы с большими числами. Мб не совсем то что вам нужно, но возможно, что-то для себя выковыряете.
2
|
|
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||||
| 26.09.2012, 00:30 [ТС] | ||||||||
![]() И всё-же, старожилы, подскажите, тут сможет кто-то в моём коде разобраться и довести его до ума или тут таким не занимаются? Спасибо!
0
|
||||||||
|
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
|
|
| 26.09.2012, 00:34 | |
|
2
|
|
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|
| 26.09.2012, 01:30 | |
|
лучше использовать не строку, а обычный числовой массив. например вектор. тогда не придется каждый раз заниматься переводом чаров в инты.
для обратного прохода по контейнерам есть такие итераторы, как rbegin и rend. счетчики должны "умирать" вместе с циклом, а не жить дальше (только если их значения не нужны в дальнейшем), поэтому и объявлять их стоит в самом цикле. чтобы не писать длинные типы данных, можно использовать ключевое слово auto если не собираетесь модифицировать данные с помощью итератора, т.е. доступ идет только на чтение, то делайте его константным. даже тип такой есть - const_iterator используйте говорящие имена переменных. например, temp мне говорит, что там просто хранится промежуточное значение. но на деле вы ее используете и в условиях, и в вычислениях это бы дело в класс обернуть
1
|
|
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 26.09.2012, 08:05 | |
|
И забейте на обратный проход. Это чревато проблемами, когда вам придётся добавлять цифр в число. Представляйте числа в little-endian: 12345 как [5, 4, 3, 2, 1] (младшие цифры по младшим адресам). Хорошо паковать по нескольку цифр в один int или что там у вас будет в элементе. В идеале — использовать все биты этого типа. (Последнее спорно.)
0
|
|
|
|
||
| 26.09.2012, 09:40 | ||
|
1
|
||
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
|||||||
| 26.09.2012, 12:32 | |||||||
самая длинная функция Add, но там первая половина не нужна Добавлено через 21 минуту если sizeof(long) = 4, то Base=10000 и BaseSize=4, чтобы при умножении не было переполнения, при перемножении максимальный размер числа - 8 разрядов умещается в 2^32 - это около 4*10^9, а если увеличить базу до пяти разрядов, то при перемножении будет 10 разрядов максимум если sizeof(long) = 8, (2^64 - 1.8*10^19) -Base=10^9 BaseSize=9;
1
|
|||||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||||||||
| 26.09.2012, 22:03 [ТС] | ||||||||||||
![]() I.M. прошёлся по Вашим комментариям:
Вот, что я написал, но оно не компилируется. Помогите найти ошибку, пожалуйста. код
0
|
||||||||||||
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|||||||
| 26.09.2012, 22:54 | |||||||
Вы чем, кстати, компилируете?
1
|
|||||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|||
| 26.09.2012, 23:15 [ТС] | |||
При вводе чисел у меня выдаёт ошибку: Debug assertion failed! Program:...dio path\my_project.exe File: path\vc\include\vector Line: 70 Expression: vector iterator not derefencable //...
0
|
|||
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
||||||
| 26.09.2012, 23:24 | ||||||
Почитайте про то, что такое указатели и ссылки. В чем разница между передачей объекта в функцию напрямую и, например, по ссылке. Тогда увидите, что еще надо исправить в программе. Еще про ключевое слово const почитайте. Когда и где его нужно использовать. Его тоже нужно добавить в код. Насчет добавления нулей в меньший массив - честно говоря, не очень согласен. Ибо пустая трата памяти. Ну да ладно. Изучайте пока язык.
1
|
||||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
|||||||||||||||
| 26.09.2012, 23:56 [ТС] | |||||||||||||||
|
Спасибо, Вам, огромное!!! Единственное --строка 7:
code
code
Результат, по-моему правильный получается. Теперь нужно с умножением сделать. Сейчас начну писать, но нужна будет Ваша помощь Закончу скорее всего уже завтра...Ещё раз огромное спасибо!!!
0
|
|||||||||||||||
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|||||||||||||
| 27.09.2012, 00:28 | |||||||||||||
|
итого получаем:
0
|
|||||||||||||
|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
| 27.09.2012, 03:36 [ТС] | ||||||
|
Всё, написал. Выкладываю полный код программы. Хотелось бы кол-во функций уменьшить, а то их много как-то... Да и критики ещё выслушать по поводу программы
И по поводу класса: я вообще-то про них ничего не знаю, но слышал, что можно скрыть неиспользуемые функции, т.е. оставить в public только Input и Result, а все остальные кинуть в private. Я правильно говорю? Помогите, пожалуйста, обернуть это в класс, если это несложно, конечно![]() код
0
|
||||||
| 27.09.2012, 03:36 | |
|
Помогаю со студенческими работами здесь
20
Длинная арифметика. Умножение двух длинных чисел. Длинная арифметика: умножение двух длинных чисел
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|