第二次循环后变量值不会改变

时间:2016-08-19 00:37:54

标签: javascript

我有一个变量num,我给它一个值。在第一个while循环之后,值会更改,但是当我尝试在第二个while循环中使用新值时,最终结果将不依赖于新的num

var a = 1,
  b = 13,
  c = 0,
  p; ///6227020800   /// 48648600  ///1801800  ///1245404160  -> /5

function div(p) {
  for (var i = a; i <= b; i++) {
    if (p % i !== 0) {
      c++;
    }
  }
  if (c === 0) {
    return 'YES'
  }
  return 'NO'
}

var num = 6227020800;

while (div(num) == "YES") {
  num /= 2;
}
num = num * 2; // num === 48648600

while (div(num) == "YES") {
  num /= 3;
}

num = num * 3; // num should be ///1801800 when num === 48648600

while (div(num) == "YES") {
  num /= 5;
}

num = num * 5 // finally num should be 360360 when num === 1801800

2 个答案:

答案 0 :(得分:1)

我不清楚你想要完成什么,但似乎在div()的第一次运行之后,c迟早会增加,然后它将永远不会{{} 1}}再次。因此,0永远不会返回div(),并且永远不会执行以下"YES" - 循环。

答案 1 :(得分:1)

简化div如下:

function div(p) {
  for (var i = a; i <= b; i++) {
    if (p % i !== 0) return false;
  }
  return true;
}

这消除了您忘记在本地声明的c变量。

现在只需更改程序的其余部分即可处理div的布尔值返回,而不是查找"YES""NO"