2013-11-28 4 views
-2

Я хочу хранить и работать с очень большими целыми числами, Каков наилучший способ сделать это без использования встроенных библиотек?Хранение больших целых чисел в C++

Основываясь на том, что сказал другой пользователь StackOverflow:

БППП :: строковый объект будет скопирован в стек, но строка тело не будет - оно будет выделено на куче. Фактическое ограничение будет зависеть от использования памяти системы и программной памяти и может составлять примерно от десяти миллионов до одного миллиарда символов в 32-битной системе.

Я просто подумал о двух простых способах, которые требуют, чтобы я написал свой собственный класс. Первый - использовать векторы и строки, а второй - разбивать большое целое на отдельные блоки в целых массивах и суммировать их.

max.size() строки на моем компьютере 4294967291.

я решил написать свой собственный класс. Спасибо за помощь: C++ char vector addition

EDIT: Работа над ней: https://github.com/Jyang772/Large_Number_Collider

+2

И ваш вопрос? –

+1

Это зависит от ваших приоритетов (простота кодирования, простота обслуживания? Производительность? Память потребления?) И какие операции вам нужно выполнять на них. –

+3

Взгляните на уже существующую библиотеку и скопируйте ее. Обманывайте свой код, пока вы его не поймете. –

ответ

1

Если это зависит от использования этого целого числа, но чтобы сохранить семантику чисел и упростить классификацию классов, я бы предложил использовать вектор целых чисел long. Использование std::string будет намного сложнее для проектирования и обслуживания кода.

Вам нужно будет переопределить все операторы и принять во внимание распространение вычислений из одной части вашего номера в другую.

+0

Спасибо. Мне понравился ваш ответ, потому что вы не предполагали, что это было для домашней работы. Я смотрю на BigInt и решил написать свой собственный класс. Я, вероятно, просто отредактирую этот вопрос позже с моим кодом. –

+0

@ Justin Хорошо;) –

0

Обычный способ заключается в использовании массив (вектор и т.д.) целых чисел (лонги и т.д.), а не строки.

Начните с просмотра существующих больших целых классов, даже если вы не можете использовать один дословный для своей домашней работы.

+0

Спасибо. И это не для домашней работы, почему вы это предположили? Это из-за моего возраста или из-за того, что вы думаете, что я ищу исходный код, который будет написан для меня? Я решил написать свой собственный класс. Это будет сложнее, но проблема будет принята. Я действительно хочу узнать что-то, что меня интересует. –

+0

Хорошо, я извиняюсь - это просто необъяснимые требования НЕ использовать готовые компоненты, как правило, являются признаком домашней работы (что, кстати, не является оскорблением, большинство людей сделали это некоторые в их жизни!). Если вы просто трудолюбивый парень, который очень хочет учиться, то обязательно сообщите об этом в своих вопросах. –

0

Когда мы сталкивались с аналогичными проблемами на конкурсах, мы использовали векторы, каждая ячейка содержащая одну цифру числа. Таким образом, вы можете хранить огромное количество.

Смежные вопросы