前端面試(演算法篇) – 水仙花數

Wise.Wrong發表於2018-09-11

一、面試題

問:你知道水仙花數吧?

答:水仙?我對花不是很瞭解啊…

問:不是水仙花!是水仙花數,也就是三位數的自冪數。

答:emmmmmmmm

問:看來是不知道了。如果一個三位數,它每個位上的數字的 3 次冪之和等於它本身,那麼這個數就是一個水仙花數。

答:額…能舉個例子麼?

問:比如 153 這個數,1^3 + 5^3+ 3^3 = 153,所以 153 就是一個水仙花數。

答:嗯嗯,我明白了。

問:好,那寫一個函式,返回所有的水仙花數。

答:no problem

 

二、水仙花數

水仙花數是自冪數中的一種,自冪數是指一個 n 位數,它的每個位上的數字的 n 次冪之和等於它本身

當這個 n=3 的時候,這個自冪數也被稱為水仙花數

與水仙花數類似的還有四葉玫瑰數(n=4)、五角星數(n=5)等等

// 判斷是否為自冪數
function isSelfPower(num) {
    // 將數字轉為字串
    let n = num.toString();
    let len = n.length;
    // 分割字串
    let content = n.split(``);
    // 初始化三位數之和
    let sum = 0

    for (let i of content) {
        // 累加每位數的的 len 次冪
        sum += Math.pow(i, len)
    }
    return sum == num
}


(function (){
    let arr = []
    for (let i = 100; i < 1000; i++) {
        isSelfPower(i) && arr.push(i)
    }
    console.log(`水仙花數有:`, arr)
})()

 

相關文章