Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2013, 18:33   #1
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию Количество цифр в факториале Pascal/C++

Найти количество цифр в записи факториала натурального числа N.
Не дружу с длинной арифметикой.
факториал 1000000 за 5 секунд!!! Как это можно?
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут

Последний раз редактировалось Izobara; 17.02.2013 в 18:40.
Izobara вне форума Ответить с цитированием
Старый 17.02.2013, 19:04   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,371
По умолчанию

А если вспомнить формулу Стирлинга?


Может поможет? ....
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 17.02.2013, 19:08   #3
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Хм, может, поможет, но в школьной олимпиаде явно не вариант.
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Старый 17.02.2013, 19:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мне кажется нужно просто закономерность понять.
Например 1*2 дает число из 1 цифры. 1*2*3 дает тоже из одной
1*2*3*4 уже две цифры
5,6 чисел - 3
7 чисел - 4
8 чисел - 5
9 - 6
10 - 7

Значит 1000000 должно дать 1000000-1-1 символов в числе.
Вот как-то так это считается раз уж 5 сек. задано. По крайней мере я бы так пробовал
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2013, 19:20   #5
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

>По крайней мере я бы так пробовал
Не Вы один такой умный пробовал. Там закономерности нет. В 1000000 там что-то вроде 1000000-5000 цифр. Уде точно не помню, но число закономерности точно нет.
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Старый 17.02.2013, 19:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Должна быть )
Как ты уже заметил, не я один такой умный, так что другие умники однозначно выяснили как такое решается быстро. Думаю стоит на математических форумах поискать.

Кстати: http://yandex.ua/yandsearch?text=%D0...oc=10&lr=20554
Неожиданно, правда?
I'm learning to live...

Последний раз редактировалось Stilet; 17.02.2013 в 20:07.
Stilet вне форума Ответить с цитированием
Старый 17.02.2013, 20:00   #7
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Должна быть )
Неожиданно, правда?
Ожиданно. Правда, яндексом не пользуюсь принципиально... Но это другая история.
В общем, таки Стирлинг
Код:
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
unsigned f(unsigned n)
{
    const double
        pi = 3.14159265358979323846,
        e = 2.7182818284590452354;
        if (n==1)
        {
            return 1;
        }
        else
        {
            return std::ceil(std::log10(2 * pi * n) / 2 + n * (std::log10(n / e)));
        }
}
int main()
{
    unsigned n;
    cin>>n;
    cout<<f(n);
}
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут

Последний раз редактировалось Izobara; 17.02.2013 в 20:18.
Izobara вне форума Ответить с цитированием
Старый 17.02.2013, 20:29   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Там закономерности нет
Есть. Как уже выше говорили - формула Стирлинга. Для школьной олимпиады может и не вариант, другого нет, кроме вычисления факториала
Код:
  n:=1000000;
  i:=Trunc((Ln(Sqrt(2*Pi*n))+n*ln(n)-n)/ln(10))+1;
5565709
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.02.2013, 21:07   #9
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Да, я уже решил. См. выше. С уважением, Кэп.
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Старый 17.02.2013, 21:25   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но это другая история.
Ну дело не в поисковике. Думаю на олимпиаде ожидался ответ типа "Последовательность логарифмически возростает" или типа того.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal.Определить к-количество трехзначных натуральных чисел,сумма цифр которых n (n=13). naty7773 Помощь студентам 2 11.01.2012 16:43
Найти все слова-числа, т.е. такие, которые состоят только из цифр. Известно, что количество цифр в каждом числе не более 9 (девяти vikichocolate Помощь студентам 1 21.12.2011 00:12
количество цифр в целом числе. Pascal ABC lyulka Помощь студентам 2 14.12.2011 10:56
Pascal: поиск слова в строке содержащего наибольшее количество цифр O'neeL Помощь студентам 3 10.12.2011 15:34
количество цифр и количество символов до первой гласной буквы 111111 Общие вопросы C/C++ 2 22.12.2008 12:15