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

如何在不使用递归或/运算符的情况下用JavaScript实现除法功能

除法实现方案

你可以沿用乘法的实现思路,通过累计减去除数的方式统计商值,全程复用已实现的加减乘方法,不使用/运算符和递归,代码如下:

const division = (a, b) => {
  // 处理除数为0的异常
  if (b === 0) throw new Error('除数不能为0');
  // 确定结果符号:同号为正,异号为负
  const sign = (a < 0) ^ (b < 0) ? -1 : 1;
  const absA = Math.abs(a);
  const absB = Math.abs(b);
  // 统计可以从被除数中减去除数的次数,即为商的绝对值
  const quotient = [...Array(absA)].reduce((acc) => {
    if (acc.remaining >= absB) {
      return {
        count: adition(acc.count, 1),
        remaining: sustraction(acc.remaining, absB)
      };
    }
    return acc;
  }, { count: 0, remaining: absA }).count;
  // 应用符号返回最终结果
  return multiplication(quotient, sign);
};

逻辑说明

  • 符号判断用异或运算实现,仅当被除数和除数符号不同时结果为负
  • 统一取绝对值计算,避免负数减法的逻辑干扰
  • reduce 初始值携带两个状态:当前累计的商值count、剩余未计算的被除数remaining,每次判断剩余值足够减除数时就更新状态,否则保持状态不变
  • 所有计算逻辑都复用你已经实现的adition、sustraction、multiplication方法,没有直接使用原生算术运算符,符合函数式编程的复用要求

效果测试

division(6, 2) // 返回 3
division(7, 2) // 返回 3(取整数商)
division(-10, 2) // 返回 -5
division(-8, -4) // 返回 2

如果需要支持小数除法,需要额外扩展余数补0的逻辑,上述实现是通用的整数除法方案,完全符合你提的约束要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:45:01