项目Euler#5 Javascript

时间:2014-01-17 04:15:04

标签: javascript

这是问题所在:

  

2520是可以除以1至10中的每个数字而没有任何余数的最小数字。   可以被1到20的所有数字整除的最小正数是多少?

这是我的代码:

var calculation = function(){
        var result = 0;
        for(var i = 20; i == 10000000000000; i++){
                for(var e = 2; e == 20; e++){
                        if(i % e == 0){
                                result = i;
                        }
                }
        }
        alert(result);      
}
calculation();

问题是程序只输出0

5 个答案:

答案 0 :(得分:2)

有更多优雅的方法可以解决这个问题,但要解决当前问题,for - 循环的'条件'部分需要返回true才能继续循环,不是当你想要阻止它。因此,您的for循环应如下所示:

for(var i = 20; i <= 10000000000000; i++){
    for(var e = 2; e <= 20; e++){
        ...
    }
}

在循环中,你有另一个问题。如果result您正在设置i % e == 0,但您从未定义过止损案例。换句话说,result将是您通过该测试的最后一个数字,即使它未通过ie的所有其他测试。你必须做这样的事情:

for(var i = 20; i <= 10000000000000; i++){
    bool found = true;
    for(var e = 2; e <= 20; e++){
        if (i % e != 0) {
            found = false;
            break; // stop testing other divisors
        }
    }
    if (found) {
        return i;
    }
}

答案 1 :(得分:1)

在这一行:

        for(var i = 20; i == 10000000000000; i++){

i == 10000000000000位意味着循环应该只在i等于10000000000000时运行 - 它永远不会,因为它已经不是那个开始了。

我想你打算写i <= 10000000000000

(您的代码还存在其他问题 - 我建议使用更小的数字进行调试,这样您就可以在不崩溃浏览器的情况下解决它们 - 但这应该可以帮助您开始。)

答案 2 :(得分:0)

在JavaScript中,Number.MAX_SAFE_INTEGER应该是可能的最大数字。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

答案 3 :(得分:0)

// 请在下面的 JS 程序中检查。

var count=0,num=1;

while(count<20){
    for(var i=1;i<=20;i++){
        if(num % i==0){
            count++;
        }
        else{
            count=0;
            break;
        }
    }
  if(count==20){
    console.log(num);
    break;
  }
else
  {
    num++;
  }
}

答案 4 :(得分:-1)

首先,选择一种你能解决这些问题的语言。我很确定在每一种语言中,for循环条件==并不意味着小于或等于所以可能首先研究任何编程语言的基础知识。

其次假设你在for循环中输入<=,你的内部for循环逻辑是有缺陷的。如果你是新手,那么最合乎逻辑的做法就是写下一些东西:

if (i%2==0 && i%3==0 && i%4 == 0 && ... && i%20==0)
  alert(i);`

实现此目的的一种方法是使用布尔值的帮助,你可以这样做:

for (var i=20; i<=1000000000; i++) { //Your upper bound is wayy too high.
  var done = true;
  for (var e = 2; done && e <= 20; e++) { //Be more efficient.
    done = done && (i % e == 0);
  }
  if (done) {
    alert(i);
    return;
  }
}