Задача A. «Киберспорт»
Всё большую популярность среди молодёжи приобретает киберспорт. Наряду с таким увлекательным состязанием как игра в «Counter-Strike», стали проводиться турниры в номинации «На кого бог пошлёт».
Участники турнира получают случайную цифру C от 0 до 9, затем каждый из них вычисляет порядковый номер своего дня рождения в году D и находит факториал D! этого числа. Победителем турнира объявляется тот участник, у которого в D! цифра C встречается наибольшее количество раз.
Напоминаем, что факториал числа D обозначается D! и равен произведению 1•2•3•…•D.
Жюри турнира «На кого бог пошлёт» просит вас написать программу, которая будет проверять результаты участников.
Входные данные
Два целых числа D и C (1 ≤ D ≤366, 0 ≤ C ≤9).
Выходные данные
Единственное число, количество вхождений цифры C в число D!.
Примеры
Вход Выход
5 2 1
7 0 2
Другие языки программирования и технологии
Помогите с задачкой на паскаль
type
ll = record
l: integer;
d: array [1..1000] of byte;
end;
procedure add(var a, b: ll);
var
c, m: integer;
r: byte;
begin
m := 0;
if b.l > a.l then a.l := b.l;
for c := 1 to a.l do begin
r := a.d[c] + b.d[c] + m;
a.d[c] := r mod 10;
m := r div 10;
end;
if m > 0 then begin
inc(a.l);
a.d[a.l] := m;
end;
end;
procedure mul(var a: ll; b: integer);
var
c: integer;
r: ll;
begin
r := a;
for c := 1 to b - 1 do add(a, r);
end;
procedure fact(n: integer; var r: ll);
begin
fillchar(r, sizeof(r), 0);
r.l := 1;
r.d[1] := 1;
while n > 0 do begin
mul(r, n);
dec(n);
end;
end;
var
f: ll;
c, n, d, r: integer;
begin
readln(n, d);
fact(n, f);
for c := 1 to f.l do if f.d[c] = d then inc(r);
writeln(r);
end.
ll = record
l: integer;
d: array [1..1000] of byte;
end;
procedure add(var a, b: ll);
var
c, m: integer;
r: byte;
begin
m := 0;
if b.l > a.l then a.l := b.l;
for c := 1 to a.l do begin
r := a.d[c] + b.d[c] + m;
a.d[c] := r mod 10;
m := r div 10;
end;
if m > 0 then begin
inc(a.l);
a.d[a.l] := m;
end;
end;
procedure mul(var a: ll; b: integer);
var
c: integer;
r: ll;
begin
r := a;
for c := 1 to b - 1 do add(a, r);
end;
procedure fact(n: integer; var r: ll);
begin
fillchar(r, sizeof(r), 0);
r.l := 1;
r.d[1] := 1;
while n > 0 do begin
mul(r, n);
dec(n);
end;
end;
var
f: ll;
c, n, d, r: integer;
begin
readln(n, d);
fact(n, f);
for c := 1 to f.l do if f.d[c] = d then inc(r);
writeln(r);
end.
Классическая задача на длинную арифметику. Пишешь функцию умножения двух чисел, записанных в строках (результат - тоже строка) , а затем используешь ее в факториале. Ну и считаешь результат.
ар
Похожие вопросы
- Помогите с задачкой по Паскалю
- Помогите простенькие задачки по паскалю решить??)
- Люди помогите решить задачку!!!на паскале
- Помогите решить задачку в паскале на циклы. Вычисоить: y=cos(1+cos(2+...+cos(39+cos40)...))
- Помогите с задачкой на Паскале
- Помогите решить задачку в паскале!!!
- Помогите, пожалуйста, решить задачку на паскале. Заранее благодарна.
- Задачка в Паскале
- Знатоки Турбо Паскаля, помогите решить задачки для 7-го класса. Дочке очень нужно.
- помогите решить задачку по информатике на паскале. найти минимальный и максимальный элемент двухмерного массива