【问题标题】:Javascript: Testing for perfect squares without using the inbuilt squareroot formulaJavascript:在不使用内置平方根公式的情况下测试完美平方
【发布时间】:2018-08-06 17:28:00
【问题描述】:

我是 javascript 新手,正在对 codewars 进行一些测试,我正在编写一个检查完美数字的代码,即,如果一个数字的平方根是一个整数,它应该返回 true。这是我的代码,它仅适用于 0 和 1,从这里它返回 false,即使是完美正方形的数字。我需要了解为什么我的代码无法正常工作并且我看不到我的问题出在哪里。

var isSquare = function(n){
      for ( var i=0; i>=0; i++){

      var product= i*i;
      if( product === n ) 
      return true;

      else if(product !==n)
      return false;

      }
    }

【问题讨论】:

  • 看看this
  • 非常感谢,我已经通过了,真的很有帮助!

标签: javascript


【解决方案1】:

您的return false 正在运行每次输入n 不等于测试的product。也就是说,在第一次迭代中,如果n 不是0,它将return false。如果n 比测试的product 小,您应该只使用return false,并忽略迭代条件,因为测试是在循环体中完成的:

var isSquare = function(n) {
  for (var i = 0;; i++) {
    var product = i * i;
    if (product === n) return true;
    else if (product > n) return false;
  }
}
console.log(isSquare(9));
console.log(isSquare(10));

【讨论】:

  • 如果你可以将它移到循环之外,你不需要 else,因为如果它不返回 true,它将返回 false
  • 我不这么认为,否则,什么会决定循环何时终止?我知道通常你可以这样做,但这不是其中一种情况,除非你想重写大部分代码
  • 我忘了你没有放一个表达式,如果你放了那么它会在循环结束时终止
  • 非常感谢您指出我的问题所在,您的代码有效,我已经了解我的问题所在;)
【解决方案2】:

你的问题在于 else if,因为你不需要 else if,将 return 移到循环之外,它会一直检查直到你的循环为假,你还需要重写你的布尔表达式

 var isSquare = function(n){
          for ( var i=0; i<n; i++){
    
          var product= i*i;
          if( product === n ) 
          return true;
          }
         return false;
        }
        console.log(isSquare(9))
        console.log(isSquare(4))
        console.log(isSquare(12))

【讨论】:

  • 非常感谢,您的代码有效,我知道我的问题出在哪里;)
  • 如果真的对你有帮助,记得投票接受答案
  • 我很想这样做,但我的声誉低于 15,所以我目前无法投票。不过,当我达到那个水平时,我会的
  • 实际上@CertainPerformance 的答案具有更高的性能,因为我的循环停止直到我到达 n 而他的循环将停止直到 i*i 到达 n 所以我的循环将在 1000 次迭代后停止,而他的循环将在 10 次后停止迭代
猜你喜欢
  • 2016-06-21
  • 2011-03-04
  • 2018-04-20
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 2013-09-20
相关资源
最近更新 更多