題目
您可能知道一些相當大的完全平方數。但是下一個呢?
完成findNextSquare
方法,該方法用於找出參數後的下一個整數完全平方數。回想一下,整數的完全平方數是一個整數n,因此sqrt ( n )也是一個整數。
如果參數本身不是完全平方數,則返回-1
。您可以假定該參數為非負數。
範例:(輸入->輸出)121 --> 144
625 --> 676
114 --> -1 since 114 is not a perfect square
拆解流程
依據題意可整理出以下重點:
- 目標:找出下一個會成為完美平方的整數
- 規則
- 參數傳入的是乘積
- 當參數不是完美正方形,需返回 -1
- 假設傳入的參數是非負數
- 方法
- 使用
sqrt( )
方法計算傳入參數的平方根 - 將得出的值 +1 並平方,就能得到下一個完全平方數
程式撰寫
- 使用 Number.isInteger( ) 判斷傳入值是否為整數,就能確認該值是否能成為完整平方數
function findNextSquare(sq) {
let sqNum = Math.sqrt(sq);
if (!Number.isInteger(sqNum)) {
return -1;
}
return (sqNum + 1) ** 2;
}
改善寫法
- 寫法一:
Math.pow(base, exponent)
計算基數的指數總和
console.log(Math.pow(7, 2)); //49
因此可改寫如下:
function findNextSquare(sq) {
let sqNum = Math.sqrt(sq);
if (!Number.isInteger(sqNum)) {
return -1;
}
return Math.pow(sqNum + 1, 2);
}
- 寫法二
- 運用餘數判斷平方根後的數值是否為整數
- 使用三元運算子決定回傳值
- 有運用到 falsy 值概念,0 會轉型成布林型別的 false
function findNextSquare(sq) {
let sqNum = Math.sqrt(sq);
//若傳入的參數可被 1 整除,餘數為 0,那就代表該數是整數
//0 會被轉型成布林型別的 false
//於是會回傳 Math.pow(sqNum + 1, 2)
//如果不能整除,餘數就不為 0
//不為零的數字會被轉型成布林型別的 true
//於是回傳 -1
return sqNum % 1 ? -1 : Math.pow(sqNum + 1, 2);
}
這個寫法相當精簡,原來還可以這樣寫!
今天就介紹到這裡,如果大家有更好的寫法歡迎一起來討論~