【问题标题】:find the trailing zeroes of the factorial [duplicate]找到阶乘的尾随零[重复]
【发布时间】:2022-11-10 21:57:31
【问题描述】:

问题是在数字末尾有多少个零, 例如,如果 5 的阶乘为 120,则结果为 1,因为如果有 2 个零,则最后只有一个零,则结果为 2。

所以我在javascript中尝试了这个逻辑来解决这个问题,并且对于不同的数字它可以工作,但对于某些测试用例它没有显示所需的输出。

无法弄清楚为什么会出现错误,如果有人有更好的优化代码,请分享并指出正在做的错误

const fun=(n)=>
{
   

 let fact = 1;
    let counter = 0;
    for (let i = 1; i <= n; i++) {
        fact *= i
    }
        while (fact % 10 == 0) {
            let val = fact / 10;
            fact = val;
            counter++
        }
    
    return counter


}
console.log(fun(5))

【问题讨论】:

  • 失败的测试用例有哪些?无法存储在javascript数字中的大数字?
  • 1. 如果您想要阶乘结果和尾随零的数量,您可以编写一个计算数字的阶乘的函数,但使用字符串而不是数字。 2.如果你只想要尾随零的数量,你可以存储零的数量而不计算阶乘结果。您应该计算阶乘除以 10 的次数。在这种情况下,您的问题已经有了答案here
  • 好的!数学通常比复杂的脚本更有效。

标签: javascript data-structures


【解决方案1】:

您的函数适用于所有数字,只要它们不会变得太大,javascript 很难处理大数字。解决它的一种简单方法是在计算因子时计算零。

const fun=(n)=>
{
    let fact = 1;
    let counter = 0;
    for (let i = 1; i <= n; i++) {
      fact *= i;
      if(fact % 10 == 0){
        fact/=10;
        counter++;
      }
    }
  return counter
}
console.log(fun(24));

这仍然有一个限制,但可能足够高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多