Вопрос № 60091: Здравствуйте, уважаемые эксперты! Помогите пожалуйста с таким заданием: нужно вычислить факториал любого числа, используя класс, который может хранить число любой длины. Вариант с записью одного символа числа в один char строки работает, но медленно,...
Вопрос № 60.091
Здравствуйте, уважаемые эксперты! Помогите пожалуйста с таким заданием: нужно вычислить факториал любого числа, используя класс, который может хранить число любой длины. Вариант с записью одного символа числа в один char строки работает, но медленно, подскажите пожалуйста что-нибудь более профессиональное... PS некоторые советуют использовать вектора, но я не знаю как...
Отправлен: 25.10.2006, 00:07
Вопрос задала: Alena (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Madproger
Здравствуйте, 1!
Это максимальное целое (64 бита)
http://msdn2.microsoft.com/en-us/library/system.uint64.aspx
Или еще лучше тип double (х<1.7*E308)
Если ты доберешься в вычислении факторила до большего числа - ты думаешь твой компьютер сколько будет его считать?
--------- И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 9-ый класс)
Ответ отправлен: 25.10.2006, 00:32
Отвечает: Delph
Здравствуйте, Alena!
Вычислить факториал вообще любого числа нереально (попробуйте оценить размер числа, хранящего факториал от миллиарда... Вам не хватит оперативной памяти). Можно написать класс, считающий факториалы небольших целых чисел - до тысячи, например. Если Вас это устроит, пишите в личку, я готов Вам помочь.
Ответ отправил: Delph (статус: 2-ой класс)
Ответ отправлен: 25.10.2006, 10:13
Отвечает: JohnP
Здравствуйте, Alena!
"запись одного символа числа в один char строки" -
это похоже на представление чисел в формате BCD
(Binary Coded Decimals - Двоично Кодированные Десятичные).
Если организовывать их обработку на ассемблере, в котором
предусмотрены специальные комманды для работы с ними,
то можно добиться высокого быстродействия.
Примеры можно посмотреть в следующем учебнике по ассемблеру:
http://download.ware.ru:8080/win/6853_ASSEMBER.chm
но это на случай, если Вы владеете ассемблером
и достаточным терпением :)
А здесь можно посмотреть довольно неплохой реализации класс
работы с большими целыми:
http://www.codeproject.com/csharp/biginteger.asp
правда, на C#, но понятно так же как на C++.
Там под число отводится массив из 4-байтных беззнаковых.
Кроме того, реализованы арифметические
и еще некоторые полезные операции.
Кстати, этот класс не использует вектора, поэтому
при его модернизации, он станет еще более быстродейственным,
так как исчезнут некоторые лишние расходы времени при выделении
памяти под число или изменение размера выделенной памяти.
Работа с векторами - на самом деле не сложна.
Почитать можно здесь: http://www.opennet.ru/docs/RUS/qt3_prog/c5266.html
Или на родине STL: http://www.sgi.com/tech/stl/Vector.html
Удачи!
Ответ отправил: JohnP (статус: 1-ый класс)
Ответ отправлен: 25.10.2006, 11:15 Оценка за ответ: 5