IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Операции с очень большими числами, Реализация в программе
сообщение
Сообщение #1


Новичок
*

Группа: Ожидающие
Сообщений: 27
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Подскажите пожалуйста каким методом лучше пользоваться при вычислении например 946372635!.
1. Преобразовать число в строку, и со строкой посимвольно работать.
2. Использовать массив из нескольких переменных, типа longint
3. Использовать массив, в каждой ячейке которого будет храниться одна цифра.
Или в Turbo Pascal'е есть возможность создавать переменные, заданным побайтовым размером.
Но не используя встроенный ассемблер.

Это нужно, как вообще возможность, а не для какой-то программы конкретнее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

Со строкой, боюсь, много сделать не получится - ограничение в 255 символов очень скоро даст о себе знать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской
Реальное имя: Данил

Репутация: -  0  +


думаю, проще всего будет использовать массивы из несколльких тысяч элементов (по потребности) типа байт. тогда все арифметические действия нужно будет организовывать вручную (умножение солбиком и тд) smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Gendalf @ 1.11.2007 0:06) *
каким методом лучше пользоваться при вычислении например 946372635!.

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

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

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

PS
А вы говорите - глобализм, амбиции, стремление к мировому господству.. Человеку ответ к домашнему заданию записать негде! smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Ожидающие
Сообщений: 27
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


Цитата(Lapp @ 12.12.2007 8:59) *
Сказать, что для одной только записи такого числа не хватит памяти всех существующих на Земле компьютеров - это ничего не сказать.


А если не записывать, а требуется только вывести его на экран? то в принципе и за буфер видеокарты не выйдем
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Gendalf @ 24.12.2007 12:47) *

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

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

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

PS
добавление еще одного восклицательного знака (1000000000!!) делает мои рассуждения верными smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Ожидающие
Сообщений: 27
Пол: Мужской
Реальное имя: Юрий

Репутация: -  0  +


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


Для этого тема и создана, есть какие-нибудь соображения? Если есть - поделись пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Факториал миллиарда будет иметь грубо говоря где-то сто миллионов (очень грубая оценка) цифр в записи
no1.gif Только нулей в записи числа 1000000000! будет чуть меньше 250 миллионов (249999998 если быть точным)...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 5:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name