關於水仙花數的拓展

2021-09-12 20:31:12 字數 1627 閱讀 9730

二、自冪數

水仙花數(narcissistic number)也被稱為超完全數字不變數(pluperfect digital invariant, ppdi)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(armstrong number),水仙花數是指乙個 3 位數,它的每個位上的數字的 3 次冪之和等於它本身(例如:1 ^ 3 + 5 ^ 3+ 3 ^ 3 = 153)。

顯然,為了判斷乙個三位數 n 是否是水仙花數,需要先得到它的個位、十位和百位。具體的方法有很多,這裡我通過 n 和10取模得到個位,n 除10再和10取模得到十位,n 除 100 得到百位。

得到個位十位百位後只需要判斷他們的立方和是否等於 n ,就能知道 n 是不是水仙花數。

這裡我們只判斷 num 是否是水仙花數。如果想判斷多個數字只需要乙個迴圈就可以解決,這裡不再多說。

#include

#include

intmain()

else

system

("pause");

return0;

}

在上面我已經提過了水仙花數是自冪數的一種,以下是自冪數的定義。

自冪數是指乙個 n 位數,它的每個位上的數字的 n 次冪之和等於它本身。(例如:當 n 為 3 時,有 1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153,153 即是 n 為 3 時的乙個自冪數)

自冪數包括:獨身數、水仙花數、四葉玫瑰數、五角星數、六合數、北斗七星數、八仙數、九九重陽數、十全十美數。

顯然,要求乙個數 num 是否是自冪數,就需要先判斷它的位數 n ,並把它的每一位取出來並判斷它們的 n 次冪之和是否等於 num 。在這些操作中,首先就需要得到位數 n ,並根據 n 來計算後續的冪值。

那麼,如何通過 n 來決定是使用幾次冪呢?在這裡,我使用了 if 語句來進行選擇1

。在實現中,我定義了陣列 num[n] 來儲存所求數的每一位,n 定義為 3 。我們也可以將 n 定義為更大的數去求相應位數的自冪數2

#include

#include

intmain()

if(1== i)

}elseif(

2== i)

}elseif(

3== i)}}

system

("pause");

return0;

}

#include

#include

#include

intmain()

for(sum =

0, j =

0; j < n; j++)if

(sum == i)

}system

("pause");

return0;

}

switch 語句和 if 語句都能實現多選擇結構,可以根據個人習慣進行選擇。 ↩︎

注意:有符號位 int 的範圍是 -2147483648—2147483647,無符號位 int 的範圍是 0—4294967295,能實現部分 10 位自冪數的計算。使用高精度計算,可以得到超過 int 型別上限的自冪數。 ↩︎

關於水仙花數

前幾天看到有人去面試,筆試要求寫出列印水仙花數 這裡先解釋下什麼是水仙花數,以153為例,153 1的三次方 5的三次方 3的三次方。也就是所謂的水仙花數是指乙個三位數,其各位數字立方和等於該數本身。那麼,我們先來看 public static void main string args 其中,x ...

求水仙花 ghpython 水仙花數02

今天咱們繼續來看看老潘微博裡的乙個python小案例,求水仙花數,這個小案例在前兩天已經分享了,今天分享另一種方法,常言道只要思想不滑坡,方法總比困難多,而且今天的方法個人覺得更pythonic一點。水仙花數 四葉玫瑰數 五角星數 由於2位數的自冪數不存在,這裡直接從100遍歷到100000 for...

關於水仙花數問題 python

這個問題本身並不難,從題目中已經得知判斷的標準是 滿足方程abc a 3 b 3 c 3即可,所以解決問題的關鍵是將乙個三位數的百位,十位,個位的數分離出來,具體的辦法已在 中給出。編寫乙個程式,求 100 999 之間的所有水仙花數。如果乙個 3 位數等於其各位數字的立方和,則稱這個數為水仙花數。...