Javascript 你知道没有除法算子的计算机除法吗?

Javascript 你知道没有除法算子的计算机除法吗?,javascript,algorithm,math,computer-science,Javascript,Algorithm,Math,Computer Science,通过在JavaScript中应用计算机科学算法,您可以解决以下问题吗 该函数接受正整数值或负整数值形式的分子和分母 不能使用“*”、“/”或“%” function divide(num, denom) { // ... } divide(6, 2) divide(-10, 5) divide(7, 2) divide(-5, 10) 我很想知道是否有一种已知的计算机科学算法可以解决这个问题。您可以尝试以下方法: function divide(num, denom) { var

通过在JavaScript中应用计算机科学算法,您可以解决以下问题吗

该函数接受正整数值或负整数值形式的分子和分母

不能使用“*”、“/”或“%”

function divide(num, denom) {
  // ...
}

divide(6, 2)
divide(-10, 5)
divide(7, 2)
divide(-5, 10)

我很想知道是否有一种已知的计算机科学算法可以解决这个问题。

您可以尝试以下方法:

function divide(num, denom) {
    var count = 0;
    while (num > 0) {
        num = num - denom
        if (num >= 0) {
            count ++;
        }
    }
    return count;
}

我看到了这个问题,不得不尝试一下,我已经实现了一个解决方案,可以将小数点精确到指定的精度,也可以处理负数,它使用递归方法和一些字符串操作

//计算到小数点
const MAX_精度=6;
函数除法(分子、分母、答案=0、小数=最大精度)
{
//解释负数
if((分子<0 | |分母<0))
{
//如果两者都是负数,则返回正数,否则返回负数
if(分子<0和分母<0)
返回除法(Math.abs(分子),Math.abs(分母))
else返回除法(Math.abs(分子),Math.abs(分母));
}
//基本情况返回,如果是均匀可除的,或者我们已经达到了特定的感知
如果(分子==0 | |小数==0)返回答案;
//计算小数位
if(分子<分母)
{
//把最后一位移到右边
常数timesTen=parseInt(分子+0”);
//计算小数点后的某个位置
if(小数==最大精度)
返回parseFloat(答案+“+”+除法(timesTen,分母,0,小数-1));
否则返回答案+“”+除法(十倍,分母,0,小数-1);
}
//在尾部递归庄园中执行计算
返回除法(分子分母、分母、答案+1、小数);
}
//测试用例
控制台日志(划分(10,2));
控制台日志(除以(10,-2));
日志(除法(-7,-4));
控制台日志(除以(1,-2));
控制台日志(划分(11,3));

控制台日志(划分(22,7))对于平均除以其他数的数字,很简单,只需重复地从被除数中添加(或减去)除数即可。对于不能平均除其他数的数,我想你可以手动编程长除法(使用递归加法或减法而不是乘法和除法的函数)检查;方法:继续从股息中减去除数,直到股息小于除数。被除数变成余数,减法的次数变成商。有效的方法:使用位操作来找到商。除数和除数可以写成
除数=商*除数+余数
最简单的算法是,如维基百科所述,每一步都只包含一个比较,可能还包括一个减法。在浮点上,你可以近似:如果它不是均匀可除的呢?我不一定要寻找答案,更重要的是,一个已知的计算机算法。@AdamH,它仍然必须返回正确的值。实例如果值为5,则必须返回1。@user10178303如果值为13和3呢?