Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript函数将两个数字相乘,直到它们相等_Javascript - Fatal编程技术网

JavaScript函数将两个数字相乘,直到它们相等

JavaScript函数将两个数字相乘,直到它们相等,javascript,Javascript,我试图构建这个函数,让用户传递两个数字,并找到这两个数字的最小公倍数。我试图用这个逻辑来构建函数。继续乘法,直到两个数的结果相等为止。我需要一些逻辑方面的帮助。多谢各位 function performCalc(one, two) { var num1 = new Number; var num2 = new Number; var i = new Number(0); var num1 = one; var nu

我试图构建这个函数,让用户传递两个数字,并找到这两个数字的最小公倍数。我试图用这个逻辑来构建函数。继续乘法,直到两个数的结果相等为止。我需要一些逻辑方面的帮助。多谢各位

function performCalc(one, two) {
        var num1 = new Number;
        var num2 = new Number;
        var i = new Number(0);

        var num1 = one;
        var num2 = two;

        var result1 = new Number;
        var result2 = new Number;

        do {
            result1 = num1 * i;
            result2 = num2 * i;
            i++
        }
        while (result1 != result2);
        if (result1 == result2) {
            return result1;
        }
    }

也许这会奏效:

do {
  result1 = num1 * i;
  result2 = num2 * i;

  if( result1 == result2 ){ break; }
  i++
}

return result1;
看起来,您的代码是在一个无限循环上的,甚至可能会使用类似于

i++;
if( i > 1000 ){  result1=0; break; } //if it tried 1000 times and found nothing, abort and return zero...

这将始终返回0,因为
i
0
开始,因此
result1
将为0,
result2
将为0

要找到LCM,您需要测试不同的产品集(例如,在
LCM(12,18)
的情况下,您需要将
18
乘以
2
12
乘以
3

一种方法是:

var i,j;
for(i=1;i <= two; ++i) {
    for(j=1; j<=one; ++j) {
        if(one * i == two * j) { 
            return one * i;
        }
    }
}
vari,j;

对于(i=1;i您的解决方案的问题是,虽然
result1
result2
可能在不同的时间持有相同的值,但只有当原始输入
one
two
相同时,它们才会在同一时间共享相同的值。因为您的返回条件依赖于这些值的等价性如果是两个值,则最终得到的函数只有在
one==two
时才返回。输入
3
5
的循环示例如下

  • i=0,result1=0,result2=0
  • i=1,结果1=3,结果2=5
  • i=2,结果1=6,结果2=10
  • …无限大,其中
    result1
    从不等于
    result2

    更好的解决方案是取一个值
    A
    (其中
    A
    是绝对值最低的参数)并反复将该数字添加到自身中,直到总和
    ret
    完全可被
    a
    b
    整除。我们可以使用来检查这种情况。这种方法还允许我们计算“负最低公倍数”,如有必要:

    function lowest_common_multiple(a,b) {
        var max = Math.max(a,b),
            min = Math.min(a,b);
        if(Math.abs(max + min) <= Math.abs(max)) { 
            return 0;
        }
        var abs_min = (Math.abs(a) < Math.abs(b)) ? a : b;
        var ret = abs_min;
        while(1) {
            ret += abs_min; 
            if(!(ret % a || ret % b)) {
                return ret;
            }
        }
    }
    
    console.log(lowest_common_multiple(11,27));   // >> +297
    console.log(lowest_common_multiple(-11,-27)); // >> -297
    
    功能最低\u公共\u倍数(a、b){
    var max=数学最大值(a,b),
    min=数学min(a,b);
    如果(数学绝对值(最大+最小值)>+297
    console.log(最低公共倍数(-11,-27));//>-297
    

    请注意,如果用户为其中一个(或两个)传入零,则此实现将返回零参数,或者如果一个参数为正,而另一个参数为负。

    您的函数似乎没有返回任何内容。我认为您需要在do循环上测试result1而不是result2,然后中断它并返回输入数字
    x
    y
    ,您的函数将计算所有可能的
    x*k
    y*k
    表示
    k
    的所有值。但是
    x*k==y*k
    只有当
    x==y
    表示
    k
    的所有值时才是真的(你可以通过将方程除以
    k
    很容易看出这一点)。如果您想要最小公分母,则需要检查
    x/k
    是否是一个整数,或者——在JS中--
    floor(num1/i)=(num1/i)
    或者更快的,
    (num1%i)==0
    。如果将结果乘以相同的数字,您如何期望结果是相同的?抱歉,刚刚注意到您希望LCM不是最低公分母。下面的Nirks答案应该涵盖这一点。此外,据我所知,新数字有缺陷,为什么不使用简单的零进行初始化,如var i=0,result1=0,result2=0;我不知道为什么他需要这个函数,也许是为了一些家庭作业……事实上,value1和value2永远不会相等,因为它们被乘以相同的数字(i)但我只是用看似无限的do循环加上我的两分钱。干杯。提问者要求一种算法来获得两个数字的LCM。@luiges90计算LCM有更有效的方法,比如用欧几里德方法计算GCD,然后计算1*2/GCD(1,2),但OP需要一种增量方法