特定のパラメーターが平方数であるかどうかをテストする関数を作成しました。
ここで平方数についてお読みください: https://en.wikipedia.org/?title=Square_number
数値が平方数の場合はtrueを返し、それ以外の場合はfalseを返します。負の数もfalseを返します。
例:
isSquare(-12) // => false
isSquare( 5) // => false
isSquare( 9) // => true
isSquare(25) // => true
isSquare(27) // => false
現在、私はこの方法を使用しています: http://jsfiddle.net/marcusdei/ujtc82dq/5/
しかし、仕事を終わらせるためのより短いよりクリーンな方法はありますか?
これを試して:
var isSquare = function (n) {
return n > 0 && Math.sqrt(n) % 1 === 0;
};
sqrt
が完全な番号かどうかを確認します。つまり、integer
私は間違いなく行きます:
var isSquare = function (n) {
return Math.sqrt(n) % 1 === 0;
};
PS: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の操作を高速化する方法が必要です。
私はこれがより短くてきれいなオプションだと思います:
var isSquare = function(n) {
return Number.isInteger(Math.sqrt(n));
};
isSquare(25); //true
あなたが使用できるものよりもさらに短くてきれいな場合:
var isSquare = n => Number.isInteger(Math.sqrt(n));
isSquare(25);//true
これ(Math.sqrt(number)%1 === 0)は基本的に十分ではありませんか?数値の平方根が整数かどうかをチェックするだけです。整数の場合、それは完全な正方形です。
明らかに、その情報をどのように処理するかに応じて、追加のコードが必要になる場合があります。