什么';在JavaScript中,测试给定参数是否为平方数的最佳方法是什么?

什么';在JavaScript中,测试给定参数是否为平方数的最佳方法是什么?,javascript,numbers,perfect-square,Javascript,Numbers,Perfect Square,我创建了一个函数来测试给定的参数是否是一个平方数 请在此处阅读有关平方数的信息: 如果该数字是一个平方数,则返回true,否则返回false。负数也返回false 示例: isSquare(-12) // => false isSquare( 5) // => false isSquare( 9) // => true isSquare(25) // => true isSquare(27) // => false 现在,我正在使用这种方法: 但是,有没有一种更短

我创建了一个函数来测试给定的参数是否是一个平方数

请在此处阅读有关平方数的信息:

如果该数字是一个平方数,则返回true,否则返回false。负数也返回false

示例:

isSquare(-12) // => false
isSquare( 5) // => false
isSquare( 9) // => true
isSquare(25) // => true
isSquare(27) // => false
现在,我正在使用这种方法:

但是,有没有一种更短更干净的方法来完成这项工作呢?

试试这个:

var isSquare = function (n) {
    return n > 0 && Math.sqrt(n) % 1 === 0;
};
  • 检查数字是否为正
  • 检查
    sqrt
    是否为完整数字,即
    integer

  • 我肯定会选择:

    var isSquare = function (n) {
        return Math.sqrt(n) % 1 === 0;
    };
    
    注:
    0
    对于那些想知道的人来说是一个平方数


    如果您在JavaScript中使用新的BigInt,则有点麻烦:

    // integer square root function (stolen from the interwebs)
    function sqrt(n) {
      let a = 1n;
      let b = (n >> 5n) + 8n;
      while (b >= a) {
        let mid = (a + b) >> 1n;
        if (mid * mid > n) {
          b = mid -= 1n;
        } else {
          a = mid += 1n;
        }
      }
      return a -= 1n;
    }
    
    sqrt(25n) === 5n
    sqrt(26n) === 5n
    ...
    sqrt(35n) === 5n
    
    到目前为止,我找到的确定n是否为正方形的最好、最快的方法是:

    function isSquare(n) {
       return n%sqrt(n) === 0n
    }
    
    但是必须有一种更快的方法来进行BigInt操作。

    这(Math.sqrt(number)%1==0)基本上还不够吗?它只是检查数字的sqrt是否是一个整数,如果是,那么它就是一个完美的正方形


    显然,根据您对该信息的处理方式,它可能需要额外的代码。

    我认为这是一个更短、更干净的选项:

      var isSquare = function(n) {
    
      return Number.isInteger(Math.sqrt(n));
    };
    
    isSquare(25); //true
    
    
    甚至比您可以使用的更短、更干净:

    var isSquare = n => Number.isInteger(Math.sqrt(n));
    
    isSquare(25);//true
    
    //1st
    var isPerfectSquare=函数(num){
    返回Math.sqrt(num)%1==0;
    }
    //第二:循环从1到num的所有数字
    var isPerfectSquare=函数(num){
    对于(设i=1;i我走了那条路线:

    var isSquare=(n)=>n==0?true:n>0&&Math.sqrt(n)%1==0;
    控制台日志(isSquare(25));
    控制台日志(isSquare(10));
    
    console.log(isSquare(16));
    引用的方法到底出了什么问题?没有比这个短多少…(而且它也非常干净)是的,我只是觉得这一个更短,但不确定是否更干净:我认为您不需要检查值是否大于0。从技术上讲,0也是一个平方数。在您的情况下,它的计算结果将为false。@mpn对于
    0
    ,您是对的。对于负数,可以保存一个函数调用。
    n>=0&…
    -to include 0Hi AnonymousContribute,您的答案与Stephane的答案是否相同:?如果是,请将此答案向上投票,而不是添加您自己的:)