Как рассчитать количество завершающих нулей факториала заданного числа.
N! = 1 * 2 * 3 * 4 ... N
Любая помощь по этому поводу?
Поскольку нули возникают в результате умножения множителей 5 и 2, перебирайте все числа от 1
до входного числа, добавляя к совокупному счету пятерок и двоек всякий раз, когда эти множители обнаруживаются. Затем верните меньшее из этих двух значений:
function zeroCount(n) {
let fives = 0;
let twos = 0;
for (let counter = 2; counter <= n; counter++) {
let n = counter;
while (n % 2 === 0) {
n /= 2;
twos++;
}
while (n % 5 === 0) {
n /= 5;
fives++;
}
}
return Math.min(fives, twos);
}
console.info(zeroCount(6)); // 720
console.info(zeroCount(10)); // 3628800
Это очень просто, это вам поможет.
function TrailingZero(n)
{
var c = 0;
for (var i = 5; n / i >= 1; i *= 5)
c += parseInt(n / i);
return c;
}
Сообщите мне, если вам понадобится помощь в понимании этой функции.
Это неверно - он возвращает нецелочисленные значения, такие как 1.2
, 1.4
, 1.6
и т. д., И не пытается проверить факториал ввода.
@CertainPerformance спасибо за предложение, я забыл добавить parseInt, теперь я обновил свой ответ.
Было бы очень полезно, если бы вы объяснили, как это работает - без каких-либо объяснений это совершенно не интуитивно понятно, как это правильно отвечает на вопрос, даже если это так.
Не думайте, что вычисление числа 2 даже необходимо, так как оно всегда будет больше 5. Достаточно просто найти число 5, и это будет количество конечных нулей.