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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 16:52   #1
Visockiy
Пользователь
 
Аватар для Visockiy
 
Регистрация: 27.12.2012
Сообщений: 10
По умолчанию факториал

Ребята помогите. Не могу решить элементарную задачу, парюсь над последним действием. " Дано число n! и цифра k. Определить сколько раз цифра к встречается в числе n!." (pascal)
Visockiy вне форума Ответить с цитированием
Старый 22.01.2013, 17:35   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

В каком виде "дано число n!"?
Abstraction вне форума Ответить с цитированием
Старый 22.01.2013, 19:32   #3
Visockiy
Пользователь
 
Аватар для Visockiy
 
Регистрация: 27.12.2012
Сообщений: 10
По умолчанию

это обычный факториал типа (3 или 4) пользватель сам задаёт его.
Visockiy вне форума Ответить с цитированием
Старый 22.01.2013, 19:52   #4
StudentMarat
Форумчанин
 
Регистрация: 10.10.2008
Сообщений: 123
По умолчанию

Код:
// рекурсивная функция
function factorial (n: integer) integer;
begin
   if n>1
   then
      factorial: = n*factorial(n-1)
   else
   factorial:=1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   k: integer;   // число, факториал которого надо вычислить
   f: integer;   // значание факториала числа k
begin
   k:=StrToInt(edit1.text);
   f:=factorial(k);
   label2.caption:='Факториал  числа '+edit1.text+' равен '+IntToStr(f);
end;
StudentMarat вне форума Ответить с цитированием
Старый 22.01.2013, 19:55   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

факториал это чрезвычайно быстрорастущая функция, для очень небольших (сравнительно) N уже не хватает разрядной сетки, чтобы найти N!

поэтому, вопрос Вам - N у Вас в задаче ограничен максимальной величиной или нет?

p.s. это я про экстенсивный путь решения - "в лоб" - вычисляем факториал N! и разбирая его на отдельные цифры сравниваем с K. НО! я вполне допускаю, что задача имеет более "красивое", алгоритмически намного более эффективное решение.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.01.2013, 20:49   #6
Visockiy
Пользователь
 
Аватар для Visockiy
 
Регистрация: 27.12.2012
Сообщений: 10
По умолчанию

я уже понял как её писать
вот код если интересно
Код:
uses crt;
type
mas=array[0..256] of integer;
var
sum, i, n, k, count: integer;
a: mas;
begin
readln(n);
readln(k);
sum:=1;
clrscr;
for i:=1 to n do //ищем факториал
sum:=sum*i; // числа
writeln(n,'!=',sum);
i:=1;
while sum<>0 do
begin
a[i]:=sum mod 10; //переписываем число
sum:=sum div 10; // по элементам в массив
if a[i]=k then //сравниваем число с заданным К
inc(count); //если цифра равна К-увеличиваем счетчик
end;
writeln('count=',count);
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.01.2013 в 23:40.
Visockiy вне форума Ответить с цитированием
Старый 22.01.2013, 21:51   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Оформляйте код кнопочкой #.
Код:
var
  sum, i, n, k, count: integer;

begin
  readln(n);
  readln(k);
  sum := 1;
  for i := 1 to n do // ищем факториал
    sum := sum * i; // числа
  writeln(n, '! = ', sum);
  count := 0;
  while sum <> 0 do
  begin
    inc(count, ord(sum mod 10 = k));
    sum := sum div 10;
  end;
  writeln('count = ', count);
  readln;
end.
Зачем Вам массив?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.01.2013, 23:39   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от BDA
Зачем Вам массив?
BDA,+100500!


Цитата:
Сообщение от Visockiy
я уже понял как её писать
Visockiy, а попробуйте задать N равным, например, 80 (K любое, на ваш выбор).
Всё нормально работает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.01.2013, 21:55   #9
pray_driver
Форумчанин
 
Аватар для pray_driver
 
Регистрация: 18.08.2010
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
BDA,+100500!



Visockiy, а попробуйте задать N равным, например, 80 (K любое, на ваш выбор).
Всё нормально работает?

программа скорее всего будет работать для N=1 ... 7 , поскольку 7! = 5040, а 8! =40320, что уже превышает великое и могучее число 32767 :-)
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
pray_driver вне форума Ответить с цитированием
Старый 29.01.2013, 07:25   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
что уже превышает великое и могучее число 32767
А про еще более великий и могучий longint ничего не слышали?

Если его использовать то можно аж до 12! дотянуть в 32-битной системе.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Факториал в Си Ruko! Помощь студентам 0 03.10.2012 20:50
Факториал Катя) Паскаль, Turbo Pascal, PascalABC.NET 5 03.03.2011 10:00
факториал locdoc Помощь студентам 11 14.11.2010 10:37
C++ (факториал) slim>>> Помощь студентам 2 13.01.2010 20:34
Факториал. dimka660i Помощь студентам 11 10.10.2009 23:28