|
5 / 5 / 1
Регистрация: 24.09.2012
Сообщений: 178
|
||||||
Длинная арифметика: сложение и умножение чисел25.09.2012, 23:03. Показов 15045. Ответов 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
Длинная арифметика. Умножение двух длинных чисел. Длинная арифметика: умножение двух длинных чисел
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU
YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей.
Звучит. . .
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
|