Помощь - Поиск - Пользователи - Календарь
Полная версия: Операции с очень большими числами
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Gendalf
Подскажите пожалуйста каким методом лучше пользоваться при вычислении например 946372635!.
1. Преобразовать число в строку, и со строкой посимвольно работать.
2. Использовать массив из нескольких переменных, типа longint
3. Использовать массив, в каждой ячейке которого будет храниться одна цифра.
Или в Turbo Pascal'е есть возможность создавать переменные, заданным побайтовым размером.
Но не используя встроенный ассемблер.

Это нужно, как вообще возможность, а не для какой-то программы конкретнее.
volvo
Лучше всего не изобретать велосипед, а взять модуль типа того, что лежит у нас в FAQ-е в теме "Длинная арифметика", тем более что и вычисление факториала с его помощью тоже приводилось, и возведение больших чисел в степень... (там подобие твоего третьего варианта используется)

Со строкой, боюсь, много сделать не получится - ограничение в 255 символов очень скоро даст о себе знать...
daZe1
думаю, проще всего будет использовать массивы из несколльких тысяч элементов (по потребности) типа байт. тогда все арифметические действия нужно будет организовывать вручную (умножение солбиком и тд) smile.gif
Lapp
Цитата(Gendalf @ 1.11.2007 0:06) *
каким методом лучше пользоваться при вычислении например 946372635!.

Боюсь, что разочарую тебя, но методов для вычисления таких чисел не существует.

Сказать, что для одной только записи такого числа не хватит памяти всех существующих на Земле компьютеров - это ничего не сказать. Если изобрести память, которая работает на состояниях отдельных электронов в отдельных атомах, то чтобы набрать нужное количество атомов для нее не хватит атомов всей нашей маленькой Вселенной - я не про Галактику говорю, это вообще капля в море.. И не просто не хватит, а сильно не хватит. Если тебе захотят помочь твои друзья из соседних вселенных (допустим, ты нашел способ с ними связаться) и отдадут их все на производство памяти для твоих нужд - все равно не хватит..

Так что ты уж извини.. Ничем не можем помочь! sad.gif

PS
А вы говорите - глобализм, амбиции, стремление к мировому господству.. Человеку ответ к домашнему заданию записать негде! smile.gif
Gendalf
Цитата(Lapp @ 12.12.2007 8:59) *
Сказать, что для одной только записи такого числа не хватит памяти всех существующих на Земле компьютеров - это ничего не сказать.


А если не записывать, а требуется только вывести его на экран? то в принципе и за буфер видеокарты не выйдем
Lapp
Цитата(Gendalf @ 24.12.2007 12:47) *

А если не записывать, а требуется только вывести его на экран? то в принципе и за буфер видеокарты не выйдем

Я должен признать, что я ошибся. sad.gif Записать, конечно, можно. Не знаю, что на меня наехало тогда, что я спутал само число с его записью - очень извиняюсь.
Да, можно записать. Факториал миллиарда будет иметь грубо говоря где-то сто миллионов (очень грубая оценка) цифр в записи, так что даже если по байту на цифру - то все равно нужна всего сотня мегобайт. Другой вопрос - как обращаться с такими большими числами (в ТР это просто немыслимо) и сколько времени уйдет на расчет (не могу сейчас даже оценить), но факт есть факт: записать такое число можно.

Еще раз извиняюсь..

PS
добавление еще одного восклицательного знака (1000000000!!) делает мои рассуждения верными smile.gif
Gendalf
Цитата(Lapp @ 24.12.2007 13:28) *
Другой вопрос - как обращаться с такими большими числами (в ТР это просто немыслимо) и сколько времени уйдет на расчет (не могу сейчас даже оценить), но факт есть факт: записать такое число можно.


Для этого тема и создана, есть какие-нибудь соображения? Если есть - поделись пожалуйста.
volvo
Цитата
Факториал миллиарда будет иметь грубо говоря где-то сто миллионов (очень грубая оценка) цифр в записи
no1.gif Только нулей в записи числа 1000000000! будет чуть меньше 250 миллионов (249999998 если быть точным)...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.