![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
batek |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 22.2.2006 Репутация: нет Всего: нет |
Нужно посчитать факториал 10 000 написал рекурсию, программа выдает сообщение о том что переменная переполненна. У меня вопрос какой тип данных нужно подобрать, что бы не вылазило сообщение.
|
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
Попробуй Int64
|
|||
|
||||
gambit |
|
|||
![]() Эксперт ![]() ![]() ![]() Награды: 1 Профиль Группа: Комодератор Сообщений: 1359 Регистрация: 25.6.2006 Где: я? Репутация: нет Всего: 40 |
Попробуй int64 но врядли. Факториал 10000 это очень жестоко
|
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 6 Всего: 121 |
факториал 1000 - это число с 2500 порядками, 10000 - это нереально много, может забыть про эту задачу.
Добавлено @ 22:51 Максимальное число, которое ты можешь уместить в расширенный вещественный тип(Extended) это 10^4932, но этого будет недостаточно конечно же. Int64 это вообще всего 20 порядков. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 9 Всего: 130 |
А сколько времени факториал этот вычисляться будет?
![]() -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 6 Всего: 121 |
2.8462596809170545189064132121199e+35659
Полное значение смотри в аттаче ![]() Это сообщение отредактировал(а) W4FhLF - 22.2.2007, 23:13 Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
batek |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 22.2.2006 Репутация: нет Всего: нет |
а можно ли как нибудь проверять переполнилась переменная или нет, но что бы программа не вылетала
|
|||
|
||||
Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: нет Всего: 10 |
Нужно создать свой собственный тип. По моим примерным подсчетам, нужно выделить под число около 16 килобайт памяти. И чуть чуть вспомнить школьную математику, а именно: как делается умножение столбиком. А 10 тысяч раз умножить столбиком, это не слишком много времени для современной вычислительной техники.
Это если нужно точно получить все цифры данного числа ![]() Это сообщение отредактировал(а) Fin - 22.2.2007, 23:09 -------------------- Пролетал мимо. |
|||
|
||||
batek |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 22.2.2006 Репутация: нет Всего: нет |
Fin,
Как тип то создать свой Добавлено @ 23:18 Fin, У меня была такая же идея умножать столбиком. Типа два массива или 3 в одном первое число каждая цифра которого в отдельную ячейку массива, второй второе число 3 массив вспомогательный так? |
|||
|
||||
Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: нет Всего: 10 |
Просто типизируй массив 16384 байт.
Сделай функцию, которая умножает данный массив на число типа integer. И вызывай ее с прирошением до 10 тысяч. Дельфями я давно не баловался, поэтому более точную подсказку я не дам. Добавлено @ 23:26 Я когда то делал битовое умножение массивов. Но там были свои трудности у меня. Тебе в принципе можно умножать байт на байт. Умножение производить в типе integer или word. Затем полученное число делиш на 256. Остаток будет записываться в этот байт. А целая часть это перенос в следуюший разряд. Это сообщение отредактировал(а) Fin - 22.2.2007, 23:27 -------------------- Пролетал мимо. |
|||
|
||||
batek |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 22.2.2006 Репутация: нет Всего: нет |
Fin, не непонял я
|
|||
|
||||
Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 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 -------------------- Пролетал мимо. |
|||
|
||||
batek |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 22.2.2006 Репутация: нет Всего: нет |
Fin,
[0] = 255 [1] = 255 [2] = 255 в математике это число 255 255 255 * 10 000 или я не правильно понял? Добавлено @ 00:29 или это число 765=255+255+255 |
|||
|
||||
Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 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 -------------------- Пролетал мимо. |
|||
|
||||
batek |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 22.2.2006 Репутация: нет Всего: нет |
умножу я так найду массив в котором факториал разложен побайтно потом мне байты же надо будет в число преобразовывать
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |