You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现整数阶乘时负数与小数输入的处理问题

JavaScript阶乘功能优化方案

边界校验(负数+非法输入处理)

  • 首先将输入的字符串值转换为数字类型,判断转换结果是否为有效数字
  • 新增负数判断分支,匹配到负数直接返回错误提示
  • 新增非数字输入的错误提示

小数阶乘实现

小数阶乘基于伽马函数的近似计算实现,满足公式n! = Γ(n+1),本次采用精度较高的Lanczos近似算法实现伽马函数计算。

完整修改后代码

JavaScript代码

// 伽马函数Lanczos近似实现
function gamma(z) {
  const g = 7;
  const p = [0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.32342877765313, -176.61502916214059, 12.507343278686905, -0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7];
  if (z < 0.5) return Math.PI / (Math.sin(Math.PI * z) * gamma(1 - z));
  z -= 1;
  let x = p[0];
  for (let i = 1; i < g + 2; i++) x += p[i] / (z + i);
  const t = z + g + 0.5;
  return Math.sqrt(2 * Math.PI) * Math.pow(t, z + 0.5) * Math.exp(-t) * x;
}

function fact(){
  const inputVal = document.getElementById("number").value;
  const number = Number(inputVal);
  const resultDom = document.getElementById("result");

  // 非法输入校验
  if (isNaN(number)) {
    resultDom.innerHTML = "*错误:请输入有效数字*";
    return;
  }
  // 负数校验
  if (number < 0) {
    resultDom.innerHTML = "*错误:负数不存在阶乘*";
    return;
  }

  let res;
  // 整数直接用原循环计算,小数调用伽马函数
  if (Number.isInteger(number)) {
    let f = 1;
    for(let i = 1; i <= number; i++)  {
      f = f * i;
    }
    res = f;
  } else {
    res = gamma(number + 1);
    // 保留4位小数可按需调整
    res = res.toFixed(4);
  }

  resultDom.innerHTML = "The factorial of the number " + number + " is: " + res ;
}

HTML代码

Enter a number: <input id = "number">
<button onclick = "fact()"> Factorial </button>
<p id = "result"></p>

内容的提问来源于stack exchange,提问作者Per

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:18:00