Другие языки программирования и технологии

ПОМОГИТЕ!!!!ПЛИИИИЗ!!!!delphi/pascal!!

Как Вы помните N! - это произведение натуральных чисел от 1 до N. Например, 5!=120, 7!=5040. Требуется написать программу, которая по заданному N определит самую правую ненулевую цифру в записи N!. Входные данные Содержит одно число N в промежутке от 1 до 10^6 Выходные данные Должен содержать одну найденную цифру. как определить ненулевую цифру-это легко. но промежуток очень велик и не получится вычислить факториал, так как никакой тип не поместит такой объем. как можно это сделать НЕ вычисляя факториал???!
Факториал числа можно представить в виде произведения трёх чисел: степень двойки, степень пятёрки и некоторое третье число.
n! = (2 ^ p) * (5 ^ q) * x, p >= 0, q >= 0, x > 0
^ - возведение в степень
Т. к. чётных чисел больше, чем тех, что делятся на 5, то p всегда больше q, поэтому q - это количество нулей в факториале. Исходную задачу можно модифицировать:
найти последнюю цифру в числе (2 ^ (p - q)) * x
Эту задачу уже решить проще:
const
pow2_digits : array[0..3] of integer = (6, 2, 4, 8);
var
n, p: integer;
nmod2, nmod5: integer;
pow2: integer;
i, k: integer;
begin
write('n = ');
readln(n);
p := 1;
nmod2 := 2;
nmod5 := 5;
pow2 := 0;
for i := 1 to n do
begin
k := i;
dec(nmod2);
if nmod2 = 0 then
begin
nmod2 := 2;
repeat
k := k div 2;
inc(pow2)
until k mod 2 <> 0
end;
dec(nmod5);
if nmod5 = 0 then
begin
nmod5 := 5;
repeat
k := k div 5;
dec(pow2)
until k mod 5 <> 0
end;
p := (p * (k mod 10)) mod 10;
end;
p := (p * pow2_digits[pow2 mod 4]) mod 10;
writeln('Last nonzero digit = ', p);
readln
end.
Парень Мужчина
Парень Мужчина
1 525
Лучший ответ
В порядке бреда: оставляя при каждом шаге только последнюю ненулевую цифру?
Например, 7!
1 => 1
1*2=2 =>2
2*3=6 =>6
6*4=24 => 4
4*5=20 => 2
2*6=12 => 2
2*7=14 => 4
И если 7!=5040 (не проверял) , то ответ-то правильный... .
На Дельфи сама напишешь, не штука.
Антон Зайцев
Антон Зайцев
58 273
> В порядке бреда

Бредим дальше ?

6*25=150=>5 (25! = 15511210043330985984000000)
Ruslan Ruslan
Ruslan Ruslan
32 502