壹、水仙花數(Narcissistic number)也被稱為超完全數字不變數(pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),水仙花數是指壹個 3 位數,它的每個位上的數字的 3次冪之和等於它本身(例如:1^3 + 5^3+ 3^3 = 153)。
二、例題:求取100至100,000以內的所有水仙花數。
思路分析:
1、總體框架
用for遍歷指定區間,判定當前循環變量i是否為水仙花數:是,則輸出到控制臺;問題細化為:判定某自然數i是否為水仙花數,具體過程由步驟2給出。
2、子框架:判定過程
大致分兩步進行:
2.1、準備參數
根據i,算得i的總位數D(digit);i中各位數的D次冪的和sum;
2.2、判定結果
比較sum和i值的大小,結果傳給步驟1;
此時問題進壹步細化為:計算總位數D和各位數的D次冪之和sum,具體結果分別由步驟3、步驟4給出;
3、D的計算
用10累除n,其商截尾取整:n/=10,再放入while語句,統計商變為0時的總累除次數,該次數+1即為D;
4、sum的計算
根據定義,只需利用for循環獲取自然數n的各位數的值,在用sum累加各位數的D次冪即可。
具體代碼:
運行結果:
擴展資料:
關於c語言水仙花數編程分析舉例
1、問題描述
輸出所有的“水仙花數”,所謂的“水仙花數”是指壹個三位數其各位數字的立方和等於該數本身,例如153是“水仙花數”,因為:153 = 13?+ 53?+ 33。
2、問題分析
根據“水仙花數”的定義,判斷壹個數是否為“水仙花數”,最重要的是要把給出的三位數的個位、十位、百位分別拆分,並求其立方和(設為s),若s與給出的三位數相等, 三位數為“水仙花數”,反之,則不是。
3、算法設計
“水仙花數”是指滿足某壹條件的三位數,根據這壹信息可以確定整數的取值範圍是 100?999。對應的循環條件如下:
4、對代碼的說明:
將n整除以100,得出n在百位上的數字hun;將(n-i*100)整除以10(或將n先整除以10再對10求模n/10%10),得出n在十位上的數字ten;將n對10取余,得出n在個位上的數字ind;求得這三個數字的立方和是否與其本身相等,若相等,則該數為水仙花數。
對於每個位置上的數值將其拆分的算法有很多種,根據不同情況選擇不同算法(對於同壹問題不同算法的效率有時會相差很多)。
下面是完整的代碼:
運行結果:
result is:153? 370? 371? 407
參考資料: