Skip to content

Instantly share code, notes, and snippets.

@Beraliv
Last active February 9, 2018 07:35
Show Gist options
  • Save Beraliv/c7d31ffe3664f508042f14c17e64055e to your computer and use it in GitHub Desktop.
Save Beraliv/c7d31ffe3664f508042f14c17e64055e to your computer and use it in GitHub Desktop.
Task 69. UniLecs. Count the number of zeros at the end of the factorial of N, 1 <= N <= 10^9
const fact = n => n < 1
? 1
: Array(n)
.fill(0)
.map((_, i) => i + 1)
.reduce((a, v) => a * v, 1);
const countOf5 = n => Math.floor((n + 5) / 10);
const countOf10 = n => Math.floor(n / 10);
// step-by-step way
const countOfZeros = n => countOf5(n) + countOf10(n);
// the easiest way, count 5 and 10
// const countOfZeros2 = n => Math.floor(n / 5);
// prevent incorrect e-typed numbers
for (let i = 0; i < 21; i++) {
const zeros = countOfZeros(i);
console.log(`factorial(${i}) = ${fact(i)} // ${zeros} zero${zeros % 10 === 1 ? '' : 's'}`);
}
@Beraliv
Copy link
Author

Beraliv commented Feb 9, 2018

Output

factorial(0) = 1   // 0 zeros
factorial(1) = 1   // 0 zeros
factorial(2) = 2   // 0 zeros
factorial(3) = 6   // 0 zeros
factorial(4) = 24   // 0 zeros
factorial(5) = 120   // 1 zero
factorial(6) = 720   // 1 zero
factorial(7) = 5040   // 1 zero
factorial(8) = 40320   // 1 zero
factorial(9) = 362880   // 1 zero
factorial(10) = 3628800   // 2 zeros
factorial(11) = 39916800   // 2 zeros
factorial(12) = 479001600   // 2 zeros
factorial(13) = 6227020800   // 2 zeros
factorial(14) = 87178291200   // 2 zeros
factorial(15) = 1307674368000   // 3 zeros
factorial(16) = 20922789888000   // 3 zeros
factorial(17) = 355687428096000   // 3 zeros
factorial(18) = 6402373705728000   // 3 zeros
factorial(19) = 121645100408832000   // 3 zeros
factorial(20) = 2432902008176640000   // 4 zeros
factorial(21) = 51090942171709440000   // 4 zeros

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment