сколько 0 в конце 1 * 2 * 3 * .... * 100?
например
1 ноль 10,2 ноль в конце 10100,0 ноль в 10001
Интервьюер дал мне 3 минуты.
я работал на переднем крае разработки.
Я пытался решить это в JavaScript, это было неправильно, потому что 100! настолько велика для переменной JS. Вот мой код.

var factorial = function(x){
  if(x<0){
    return error;
  }else if (x ===1 || x ===0) {
    return x;
  }else if (x > 1) {
    return (factorial(x - 1) * x);
  }
}

var counter = 0;
var countZero = function(x){
  while((x%10) === 0){
    counter = counter + 1;
    x = x/10;
  }
  return counter;
}
console.log(countZero(factorial(100)));

Любые идеи? Я решил это без компьютера чисто математическим способом, но я хочу знать, как решить это в JS.

0
innocentDrifter 21 Авг 2018 в 11:37

3 ответа

Лучший ответ

Число получает ноль в конце, если число имеет 10 как фактор. Например, 10 - это коэффициент 50, 120 и 1234567890. Таким образом, вам нужно выяснить, сколько раз 10 - это коэффициент расширения 100 !.

Но так как 5 × 2 = 10, нам нужно учесть все произведения 5 и 2. Глядя на факторы в приведенном выше расширении, есть еще много чисел, кратных 2 (2, 4, 6, 8, 10 , 12, 14, ...), чем кратны 5 (5, 10, 15, ...). То есть, если мы возьмем все числа с 5 в качестве фактора, у нас будет более чем достаточно четных чисел для их сопряжения, чтобы получить факторы 10 (и еще один конечный ноль на моем факториале). Таким образом, чтобы найти число, умноженное на 10, все, что нам действительно нужно беспокоиться, это то, сколько раз 5 является фактором во всех числах от 1 до 100.

Хорошо, сколько кратных 5 есть в числах от 1 до 100? Там 5, 10, 15, 20, 25, ...

Давайте сделаем это коротким путем: 100 - это ближайшее кратное 5 ниже или равно 100, а 100 ÷ 5 = 20, поэтому есть двадцать кратных 5 от 1 до 100.

Но подождите: 25 - это 5 × 5, поэтому у каждого кратного 25 есть дополнительный коэффициент 5, который мы должны учитывать. Сколько кратных 25 от 1 до 100? Поскольку 100 ÷ 25 = 4, существует четыре числа, кратные 25, от 1 до 100.

Добавляя их, мы получаем 20 + 4 = 24 конечных нуля в 100!

Это был скорее математический вопрос, а не вопрос Javascript, и вам не нужно вычислять фактический факториал, чтобы найти число конечных нулей

Подробнее здесь

0
Nirbhay Jha 21 Авг 2018 в 08:47

Нули в конце числа являются результатом умножения 2 и 5 на вместе. Итак, один из способов подсчитать общее количество нулей - выяснить, сколько всего 2 и 5 входит в 100! - не вычислять это число, просто сложите число факторов - и затем вернуть, какой бы ни счет (2 с или 5 с) наименьший.

let twos = 0;
let fives = 0;
for (let i = 1; i <= 100; i++) {
  let num = i;
  while (num % 2 === 0) {
    twos++;
    num /= 2;
  }
  while (num % 5 === 0) {
    fives++;
    num /= 5;
  }
}
console.log(Math.min(twos, fives));
0
CertainPerformance 21 Авг 2018 в 08:45

Для чисел, меньших или равных 1000000000, в качестве вашего случая здесь вы можете использовать следующий алгоритм:

function numberOfZeros(n) {
  if (n == 0) return 0;
  return parseInt(n * (n - 1) / (4 * n));
}
console.log(numberOfZeros(100));
0
Zakaria Acharki 21 Авг 2018 в 08:55
51944744