Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Факториал 
:(
    Опции темы
batek
Дата 22.2.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Нужно посчитать факториал 10 000 написал рекурсию, программа выдает сообщение о том что переменная переполненна. У меня вопрос какой тип данных нужно подобрать, что бы не вылазило сообщение. 
PM MAIL   Вверх
VICTAR
Дата 22.2.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Попробуй Int64
PM MAIL   Вверх
gambit
Дата 22.2.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: нет
Всего: 40



Попробуй int64 но врядли. Факториал 10000 это очень жестоко
PM MAIL ICQ Skype   Вверх
W4FhLF
Дата 22.2.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



факториал 1000 - это число с 2500 порядками, 10000 - это нереально много, может забыть про эту задачу.

Добавлено @ 22:51 
Максимальное число, которое ты можешь уместить в расширенный вещественный тип(Extended) это 10^4932, но этого будет недостаточно конечно же. Int64 это вообще всего 20 порядков. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Данкинг
Дата 22.2.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 9
Всего: 130



А сколько времени факториал этот вычисляться будет? smile У меня вон !1000  - и уже висит нафиг.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
W4FhLF
Дата 22.2.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



2.8462596809170545189064132121199e+35659

Полное значение смотри в аттачеsmile







Это сообщение отредактировал(а) W4FhLF - 22.2.2007, 23:13

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  10000_.txt 34,82 Kb


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
batek
Дата 22.2.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



а можно ли как нибудь проверять переполнилась переменная или нет, но что бы программа не вылетала
PM MAIL   Вверх
Fin
Дата 22.2.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Нужно создать свой собственный тип. По моим примерным подсчетам, нужно выделить под число около 16 килобайт памяти. И чуть чуть вспомнить школьную математику, а именно: как делается умножение столбиком. А 10 тысяч раз умножить столбиком, это не слишком много времени для современной вычислительной техники.

Это если нужно точно получить все цифры данного числа smile

Это сообщение отредактировал(а) Fin - 22.2.2007, 23:09


--------------------
Пролетал мимо.
PM MAIL   Вверх
batek
Дата 22.2.2007, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Fin
Как тип то создать свой

Добавлено @ 23:18 
Fin, У меня была такая же идея умножать столбиком. Типа два массива или 3 в одном первое число каждая цифра которого в отдельную ячейку массива, второй второе число 3 массив вспомогательный так?
PM MAIL   Вверх
Fin
Дата 22.2.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Просто типизируй массив 16384 байт.
Сделай функцию, которая умножает данный массив на число типа integer. И вызывай ее с прирошением до 10 тысяч.
Дельфями я давно не баловался, поэтому более точную подсказку я не дам.

Добавлено @ 23:26 
Я когда то делал битовое умножение массивов. Но там были свои трудности у меня. Тебе в принципе можно умножать байт на байт. Умножение производить в типе integer или word. Затем полученное число делиш на 256. Остаток будет записываться в этот байт. А целая часть это перенос в следуюший разряд. 

Это сообщение отредактировал(а) Fin - 22.2.2007, 23:27


--------------------
Пролетал мимо.
PM MAIL   Вверх
batek
Дата 22.2.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Fin, не непонял я
PM MAIL   Вверх
Fin
Дата 23.2.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



В байте помешается число от 0 и до 255.

Возьмем простой пример. Допустим у нас есть число с следуюшими байтами
[0] = 255
[1] = 255
[2] = 255

Его надо умножить на число 10 000
Получаем:
[0] 255 * 10 000 = 2 550 000
Делим его на 256. Получаем 9960 целая часть, 240 остаток от деления
Записываем в [0] <- 240

[1] 255 * 10 000 = 2 550 000
Добавляем предыдуший перенос 2 550 000 + 9 960 = 2 559 960
Делим его на 256. Получаем 9999 целая часть, 216 остаток от деления
Записываем в [1] <- 216

[2] 255 * 10 000 = 2 550 000
Добавляем предыдуший перенос 2 550 000 + 9 999 = 2 559 999
Делим его на 256. Получаем 9999 целая часть, 255 остаток от деления
Записываем в [2] <- 255

Так как у нас не осталось чисел для умножения, но есть перенос. Проводим дополнительные действия:
Перенос был 9999. Делим его на 256
Получаем 39 целая часть, 15 остаток от деления
Записываем в [3] <- 15

Перенос был 39. Делим его на 256
Получаем 0 целая часть, 39 остаток от деления
Записываем в [4] <- 39

Итого в нашем массиве будут такие числа,
[4] = 39; [3] = 15; [2] = 255; [1] = 216; [0] = 240



Это сообщение отредактировал(а) Fin - 23.2.2007, 00:04


--------------------
Пролетал мимо.
PM MAIL   Вверх
batek
Дата 23.2.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Fin
[0] = 255
[1] = 255
[2] = 255
в математике это число 255 255 255 * 10 000 или я не правильно понял?

Добавлено @ 00:29 
или это число 765=255+255+255
PM MAIL   Вверх
Fin
Дата 23.2.2007, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Неа. В десятичной системе счисления это 255*256*256+255*256+255=16777215
А 39*256*256*256*256+15*256*256*256+255*256*256+216*256+240 = 167772150000


--------------------
Пролетал мимо.
PM MAIL   Вверх
batek
Дата 23.2.2007, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



умножу я так найду массив в котором факториал разложен побайтно потом мне байты же надо будет в число преобразовывать
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.