#include <iostream>
using namespace std;
int main() {
int n, m = 0, a = 1;
cin >> n;
for (int i = 1; i <= n; i++) {
int x = i;
while (x % 2 == 0)
x /= 2, m++;
while (x % 5 == 0)
x /= 5, m--;
a = a * x % 10;
}
for (int i = 0; i < m; i++)
a = a * 2 % 10;
cout << a << endl;
}
Входные данные:
n, представляющее верхнюю границу диапазона.m инициализируется нулем для подсчета делителей, кратных 2.a инициализируется единицей для умножения чисел без нулей.for каждое число i в диапазоне от 1 до n анализируется:i делится на 2 без остатка, выполняется цикл while, который делит i на 2 и увеличивает m на единицу. Этот цикл подсчитывает количество делителей, кратных 2.i делится на 5 без остатка, выполняется еще один цикл while, который делит i на 5 и уменьшает m на единицу. Этот цикл подсчитывает количество делителей, кратных 5.i извлекается число без нулей, и оно умножается на a. Этот этап гарантирует, что в окончательном ответе не будут присутствовать нули.for, который обрабатывает накопленное количество делителей, кратных 2 (m).a умножается на 2 и берется остаток от деления на 10. Это эквивалентно умножению на степень 2, ограниченную 10.a выводится как результат, представляющий произведение вычисленных чисел без нулей, скорректированных на накопленные делители, кратные 2.