JS代碼題15——水仙花數(shù)

給出n,找到所有的n位十進制水仙花數(shù)。

樣例:

比如 n = 1, 所有水仙花數(shù)為:[0,1,2,3,4,5,6,7,8,9]。
而對于 n = 2, 則沒有 2 位的水仙花數(shù),返回 []。

首先,什么是水仙花數(shù)?

在數(shù)論中,水仙花數(shù)(Narcissistic number),也被稱為超完全數(shù)字不變數(shù)(pluperfect digital invariant, PPDI)、自戀數(shù)、自冪數(shù)、阿姆斯壯數(shù)或阿姆斯特朗數(shù)(Armstrong number),用來描述一個N位非負整數(shù),其各位數(shù)字的N次方和等于該數(shù)本身。

如:三位數(shù)的水仙花數(shù):

153 = 1^3 + 5^3 + 3^3
370 = 3^3 + 7^3 + 0^3
371 = 3^3 + 7^3 + 1^3
407 = 4^3 + 0^3 + 7^3

弄懂概念以后,理清解題思路。要找到所有n位數(shù)的水仙花數(shù):

  • 先要拿到n位數(shù)范圍內(nèi)的所有數(shù)字,有范圍所以要找最大最小值
  • 然后遍歷這些數(shù)字,判斷每一個數(shù)字是否為水仙花數(shù)

1. 判斷一個數(shù)字是否為水仙花數(shù)

function isNarc(num){
    var arr = num.toString().split('')
    var sum = 0
    for (var i = 0; i < arr.length; i++) {
        sum = sum + Math.pow(arr[i],arr.length)
    }
    if (sum === num) {
        return true
    }else{
        return false
    }
}

2. 找到所有的n位十進制水仙花數(shù)

function findNarc(n){
    var max = Math.pow(10,n) //n位數(shù)的盡頭(比如三位數(shù)的盡頭就是1000)
    var min = n===1?0:Math.pow(10,n-1) //當n位1的時候,最小值為0,這里要判斷一下
    var result = []
    for (var i = min; i < max; i++) {
        if(isNarc(i)){ //調(diào)用上面的函數(shù)判斷該數(shù)字是否為水仙花數(shù)
            result.push(i)
        }
    }
    return result
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容