求指定数的阶乘末尾有多少个0
求指定数的阶乘末尾有多少个0

求指定数的阶乘末尾有多少个0

求50!末尾有多少个0,即求50的阶乘的结果中,2*5因子的个数。由于因子2的个数远大于5,转为求因子5的个数。

let res = 0;
/**
 * 程序主方法
 * @params maximum[int] 将被计算阶乘的正整数
 */
const factorial_end_with_zero = (maximum) => {
  res = 0;
  exactFiveNums(maximum);
  return res;
};

/**
 * 取得能被5整除的因子
 * @param {*} num
 */
const exactFiveNums = (num) => {
  if (num < 5) {
    return;
  } else {
    num = num - (num % 5);
  }
  while (num % 5 === 0 && num > 0) {
    res = res + decompose(num);
    num = num - 5;
  }
};

/**
 * 因子可以因式分解为多少个5
 * @param _num[int] 可以被5整除的数
 */
const decompose = (_num) => {
  let _res = 0;
  while (_num % 5 === 0 && _num > 0) {
    _res++;
    _num = _num / 5;
  }
  return _res;
};

发表评论

邮箱地址不会被公开。