Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 568
от 30.10.2006, 11:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 406, Экспертов: 54
В номере:Вопросов: 1, Ответов: 3


Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное