На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> вычисление количества цифр в числе n! (факториал)
    может кто знает?!
      Каких цифр, в полученном числе что-ли! или как? ???
        формула Стирлинга
        n!~(n/e)^n*Sqrt(2*Pi*n)*(1+1/12n+1/288n^2...)
        взяв десятичный логарифм, получим порядок числа, т.е. число цифр
          ну это только в том случае, если у тебя это число в какой-нибудь стандартный тип влезет, а если нет?
            сразу надо логарифм брать, тогда влезет
            Lg(n!)=n*Lg(n/e)+1/2*Lg(2*Pi*N)

            пример для n=10
            получается ~6.56, т.е 7 знаков (6 порядок->10^6=1 000 000)
            3 628 800

              Что-то не работает эта формула ... разве что ... N и n - это одно и то же?
                >разве что ... N и n - это одно и то же?
                Да, одно и то же.
                    Ой, а зачем прикрутили еще приближенные вычисления по формуле Стирлинга? :blink:
                    Используем факт, что lg(n!) = lg(1*2*3*....*n) = lg(1) + lg(2) + ... + lg(n)
                    ExpandedWrap disabled
                      Const N = 1000000;
                       
                      Function Lg(X : Extended) : Extended;
                      Begin
                       Lg:=Ln(X) / Ln(10);
                      End;
                       
                      Var I : Longint;
                          Sum : Extended;
                       
                      Begin
                       Sum:=0.0;
                       For I:=1 To N Do Sum:=Sum + Lg(I);
                       Writeln(N, '! = ', Exp(Frac(Sum) * Ln(10)):10:10, '... * 10^', Trunc(Sum));
                      End.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0.0715 ]   [ 15 queries used ]   [ Generated: 6.10.26, 00:23 GMT ]