「水仙花數」又稱為「阿姆斯特朗數」。如果一個n(n≥3)位數的各位數字的n次冪之和等於該數本身,則該數稱為「水仙花數」。
問題描述輸出所有的「水仙花數」,所謂的「水仙花數」是指一個三位數其各位數字的立方和等於該數本身,例如153是「水仙花數」,因為:153 = 13 + 53 + 33。
問題分析根據「水仙花數」的定義,判斷一個數是否為「水仙花數」,最重要的是要把給出的三位數的個位、十位、百位分別拆分,並求其立方和(設為s),若s與給出的三位數相等, 三位數為「水仙花數」,反之,則不是。
算法設計「水仙花數」是指滿足某一條件的三位數,根據這一信息可以確定整數的取值範圍是 100〜999。對應的循環條件如下:
for(n=10; n<1000; n++)
{
//.
}
對代碼的說明:
對於每個位置上的數值將其拆分的算法有很多種,根據不同情況選擇不同算法(對於同一問題不同算法的效率有時會相差很多)。
下面是完整的代碼:
#include <stdio.h>
int main()
{
int hun, ten, ind, n;
printf("結果是:");
for( n=100; n<1000; n++ ) /*整數的取值範圍*/
{
hun = n / 100;
ten = (n-hun*100) / 10;
ind = n % 10;
if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind) /*各位上的立方和是否與原數n相等*/
printf("%d ", n);
}
printf("\n");
return 0;
}
運行結果:
於是,100~999範圍內(三位數中)的「水仙花數」得到:153,370,371,407。
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-11/155571.htm