如果给定参数是方形数,JavaScript中测试的最佳方法是什么?

Sca*_*ola 9 javascript numbers perfect-square

我创建了一个函数,用于测试给定参数是否为方数.

在这里阅读方形数字:https://en.wikipedia.org/?title = Square_number

如果数字是平方数,则返回true,否则返回false.负数也会返回错误.

例子:

isSquare(-12) // => false
isSquare( 5) // => false
isSquare( 9) // => true
isSquare(25) // => true
isSquare(27) // => false
Run Code Online (Sandbox Code Playgroud)

现在,我正在使用这种方法:http://jsfiddle.net/marcusdei/ujtc82dq/5/

但是,是否有更短的更简洁的方式来完成工作?

Tus*_*har 30

试试这个:

var isSquare = function (n) {
    return n > 0 && Math.sqrt(n) % 1 === 0;
};
Run Code Online (Sandbox Code Playgroud)
  1. 检查数字是否为正数
  2. 检查是否sqrt是完整的数字即integer

演示

  • `n >= 0 && ...` - 包括 0 (2认同)

小智 6

我肯定会去:

var isSquare = function (n) {
    return Math.sqrt(n) % 1 === 0;
};
Run Code Online (Sandbox Code Playgroud)

PS:0对于那些想知道的人来说是一个平方数

演示版


小智 5

//1st 
var isPerfectSquare = function(num) {
   return Math.sqrt(num) % 1 === 0;
}

//2nd: loop through all the number from 1 to num 
var isPerfectSquare = function(num) {
    
    for(let i=1; i <= num ; i++){
        let d = i * i;
        if(d === num){
            return true
        }
    }
}

// Optimize solution: Binary Search 
var isPerfectSquare = function(num) {

    if(num ==1)return true
    let left = 2;
    let right = Math.floor(num/2);
    while(left <= right){
        let middle = Math.floor((left + right)/2)
        let sqr = middle * middle;
        if(sqr == num){
            return true
        }else{
            if(sqr > num){
              right = middle -1
            }else{
                left = middle + 1
            }
        }  
    }
    
    return false
};
Run Code Online (Sandbox Code Playgroud)