#8 Codewars - Find the next perfect square! (7 kyu)

閱讀時間約 2 分鐘

題目

原始題目

您可能知道一些相當大的完全平方數。但是下一個呢?

完成 findNextSquare 方法,該方法用於找出參數後的下一個整數完全平方數。回想一下,整數的完全平方數是一個整數n,因此sqrt ( n )也是一個整數。

如果參數本身不是完全平方數,則返回 -1 。您可以假定該參數為非負數。

範例:(輸入->輸出)
121 --> 144
625 --> 676
114 --> -1 since 114 is not a perfect square

拆解流程

依據題意可整理出以下重點:

  • 目標:找出下一個會成為完美平方的整數
  • 規則
  1. 參數傳入的是乘積
  2. 當參數不是完美正方形,需返回 -1
  3. 假設傳入的參數是非負數
  • 方法
  1. 使用 sqrt( ) 方法計算傳入參數的平方根
  2. 將得出的值 +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);
}
  • 寫法二
  1. 運用餘數判斷平方根後的數值是否為整數
  2. 使用三元運算子決定回傳值
  3. 有運用到 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);
}

這個寫法相當精簡,原來還可以這樣寫!

今天就介紹到這裡,如果大家有更好的寫法歡迎一起來討論~

7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
題目:建立一個函數,該函數返回給定最小 4 個正整數的數組的兩個最低正數的總和。不會傳入浮點數或非正整數。例如,當一個數組像 [19, 5, 42, 2, 77], 輸出應該是 7。 [10, 343445353, 3453445, 3453545353453] 應該回來 3453
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
題目:在此 kata 中,您將創建一個包含列表並返回具有相反順序的列表的函數。範例(輸入->輸出) * [1, 2, 3, 4] -> [4, 3, 2, 1] * [9, 2, 0, 7] -> [7, 0, 2, 9]
題目:如果提供的數字在0-9之間,請以文字形式返回。輸入1、輸出 “One”
題目:Scrooge先生有一筆他想投資的錢 “P”。在他這樣做之前,他想知道 “P” 這個總和,必須將其保存在銀行中多少年,以使其達到所需的 “D” 金額。該金額在每年支付利息“I”的銀行中保留 “Y” 年。在當年繳納 “T” 稅後,新款項被重新投資。稅收注意事項:不是對投資本
題目:建立一個傳回值乘以 50 並增加 6 的函數。如果輸入的值是字串,則應傳回「Error」。
題目:建立一個函數,該函數返回給定最小 4 個正整數的數組的兩個最低正數的總和。不會傳入浮點數或非正整數。例如,當一個數組像 [19, 5, 42, 2, 77], 輸出應該是 7。 [10, 343445353, 3453445, 3453545353453] 應該回來 3453
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
題目:在此 kata 中,您將創建一個包含列表並返回具有相反順序的列表的函數。範例(輸入->輸出) * [1, 2, 3, 4] -> [4, 3, 2, 1] * [9, 2, 0, 7] -> [7, 0, 2, 9]
題目:如果提供的數字在0-9之間,請以文字形式返回。輸入1、輸出 “One”
題目:Scrooge先生有一筆他想投資的錢 “P”。在他這樣做之前,他想知道 “P” 這個總和,必須將其保存在銀行中多少年,以使其達到所需的 “D” 金額。該金額在每年支付利息“I”的銀行中保留 “Y” 年。在當年繳納 “T” 稅後,新款項被重新投資。稅收注意事項:不是對投資本
題目:建立一個傳回值乘以 50 並增加 6 的函數。如果輸入的值是字串,則應傳回「Error」。
你可能也想看
Google News 追蹤
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
8月的時候好像沒特別去哪裡玩,主要都在忙公司的事情,忙完之後才有心情在八月底九月初的時候,自己或者跟同事去吃點好的,稍微紀錄一下這一段時間吃了覺得還不錯的東西。 【注意:以下皆為個人體感口味,斟酌參考即可。】
Thumbnail
一不小心就因為現實忙碌脫離了更新這麼久,十分不好意思。 今年得知文博會會在台南辦理後就默默打定主意,如果可以的話一定要參加這長年舉辦在台北的活動。 整個活動都很美好,除了排隊。 這大概是我這一趟當中最痛苦的一段時間,八月底的太陽萬分熾熱,排隊隊伍又長又繞,但是周遭卻完全沒有可以購買
8.問曰:有未至而至,有至而不至,有至而不去,有至而太過,何謂也?師曰:冬至之後,甲子夜半,少陽起,少陽之時,陽始生,天得溫和,此為未至而至也;以得甲子,而天未溫和者,此為至而不至也;以得甲子而天大寒不解,此為至而不去也;以得甲子而天溫如盛夏五六月時,此為至而太過也。 「問曰:有未至而至,有至
Thumbnail
8/5~9/13就已經是兩次情緒交易節奏 但9月半導體展結束的恐慌也跟預估的一樣只是小行情 不太適合正常生活上班族的短期交易,但過程小享受買到恐慌還可以保持市場溫度 越是這種節奏越懂得知足滿足,不用急 只需要等到認為最適合自己的交易環境再更積極就好 #加權指數 今天收盤也已經
Thumbnail
題目:你將會得到一個單詞,你的任務是返回該單詞的中間字符。如果單詞的長度是奇數,則返回中間字符。如果單詞的長度是偶數,則返回中間的兩個字符。
Thumbnail
  搭配大盤走勢精選股選出後發動日大約落在2-14天,進場點部分可以參考群內提醒時的價位,通常操作的標的都是文章內獲選的個股,記住不要盲目跟單,下單前要自己要先看過這些個股的資訊以及文章內的提醒事項。 訂閱方案 我想要標的(88/月): 僅享有閱讀付費文章的權限。 更新內容 精選標的 結語
Thumbnail
壬寅年戊申月,兩點小提醒。 第一:流月天干的戊"對剋"流年天干的壬,流月地支的申"對沖"流年地支的寅,除了本來就一直提醒要注意的寅申衝,因為寅跟申都是驛馬,雙頭馬車互相拉扯,在命理上就會有較明顯的車關,對於人的內外在也比較浮動。 第二:本月走完,下個月中秋節後,2023癸卯年的氣場就會開始慢慢進氣
接續上一篇文章,大部分的S-REITs業績都發布得差不多了,可以藉由EPS的變動來快速挑選有興趣的來看一下。
Thumbnail
今天下午會議結束後,我寫了晚上更新的專欄〈【特輯】五個突破創作困境的方法〉。這一次的文章內容,聚焦在我如何面對創作困境。這一篇工作日誌裡除了會寫專欄撰寫的背後動機,也曝光了今天開會時畫的圖(別看這樣,我很認真開會的)。
Thumbnail
今天焦點─台灣八七水災  1959年 一個小小的熱帶性低氣壓過境台灣,在中南部地區造成空前豪雨,一夕之間傾盆而下1公尺深的大雨,進而引發嚴重水患,這場20世紀台灣最大的豪雨,淹沒沖走台中到高雄廣大農地和農作物,43%農地與40%農家受到損害,災害損失高達國民生產毛額1/10,約為台灣政府一年的總預
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
8月的時候好像沒特別去哪裡玩,主要都在忙公司的事情,忙完之後才有心情在八月底九月初的時候,自己或者跟同事去吃點好的,稍微紀錄一下這一段時間吃了覺得還不錯的東西。 【注意:以下皆為個人體感口味,斟酌參考即可。】
Thumbnail
一不小心就因為現實忙碌脫離了更新這麼久,十分不好意思。 今年得知文博會會在台南辦理後就默默打定主意,如果可以的話一定要參加這長年舉辦在台北的活動。 整個活動都很美好,除了排隊。 這大概是我這一趟當中最痛苦的一段時間,八月底的太陽萬分熾熱,排隊隊伍又長又繞,但是周遭卻完全沒有可以購買
8.問曰:有未至而至,有至而不至,有至而不去,有至而太過,何謂也?師曰:冬至之後,甲子夜半,少陽起,少陽之時,陽始生,天得溫和,此為未至而至也;以得甲子,而天未溫和者,此為至而不至也;以得甲子而天大寒不解,此為至而不去也;以得甲子而天溫如盛夏五六月時,此為至而太過也。 「問曰:有未至而至,有至
Thumbnail
8/5~9/13就已經是兩次情緒交易節奏 但9月半導體展結束的恐慌也跟預估的一樣只是小行情 不太適合正常生活上班族的短期交易,但過程小享受買到恐慌還可以保持市場溫度 越是這種節奏越懂得知足滿足,不用急 只需要等到認為最適合自己的交易環境再更積極就好 #加權指數 今天收盤也已經
Thumbnail
題目:你將會得到一個單詞,你的任務是返回該單詞的中間字符。如果單詞的長度是奇數,則返回中間字符。如果單詞的長度是偶數,則返回中間的兩個字符。
Thumbnail
  搭配大盤走勢精選股選出後發動日大約落在2-14天,進場點部分可以參考群內提醒時的價位,通常操作的標的都是文章內獲選的個股,記住不要盲目跟單,下單前要自己要先看過這些個股的資訊以及文章內的提醒事項。 訂閱方案 我想要標的(88/月): 僅享有閱讀付費文章的權限。 更新內容 精選標的 結語
Thumbnail
壬寅年戊申月,兩點小提醒。 第一:流月天干的戊"對剋"流年天干的壬,流月地支的申"對沖"流年地支的寅,除了本來就一直提醒要注意的寅申衝,因為寅跟申都是驛馬,雙頭馬車互相拉扯,在命理上就會有較明顯的車關,對於人的內外在也比較浮動。 第二:本月走完,下個月中秋節後,2023癸卯年的氣場就會開始慢慢進氣
接續上一篇文章,大部分的S-REITs業績都發布得差不多了,可以藉由EPS的變動來快速挑選有興趣的來看一下。
Thumbnail
今天下午會議結束後,我寫了晚上更新的專欄〈【特輯】五個突破創作困境的方法〉。這一次的文章內容,聚焦在我如何面對創作困境。這一篇工作日誌裡除了會寫專欄撰寫的背後動機,也曝光了今天開會時畫的圖(別看這樣,我很認真開會的)。
Thumbnail
今天焦點─台灣八七水災  1959年 一個小小的熱帶性低氣壓過境台灣,在中南部地區造成空前豪雨,一夕之間傾盆而下1公尺深的大雨,進而引發嚴重水患,這場20世紀台灣最大的豪雨,淹沒沖走台中到高雄廣大農地和農作物,43%農地與40%農家受到損害,災害損失高達國民生產毛額1/10,約為台灣政府一年的總預