【C語言】輸出100~999之間的所有“水仙花數”
阿新 • • 發佈:2019-01-03
“水仙花數”:
“水仙花數”又稱為“阿姆斯特朗數”。如果一個n(n≥3)位數的各位數字的n次冪之和等於該數本身,則該數稱為“水仙花數”。如:153=1³+5³+3³。
問題:輸出100~999之間的所有“水仙花數”。
實現思路:
根據“水仙花數”的特點分析不難發現,只要拿到某個三位數(定義一個變數m,初始值設為100)的各位數字,再進行判斷它們的立方和是否等於m,若等於,則輸出m,否則,m自增1。上述過程是一個迴圈,只要m<=999,迴圈繼續執行。
下面討論m的各位數字如何獲得。首先需要定義三個變數i,j,k,分別記錄m的各位數字。
對於一個三位數m,其百、十、個位數字為i,j,k,則可知:i *100+j *10+k *1=m
百位數(i):因為m為一個三位數,所以m/100等於其百位數字。
十位數(j):若對m有m/10,則可以得到m的百位和十位組成的一個兩位數,如:123/10=12。再用這個兩位數減去i*10,便得到了十位數字j。
個位數(k):上面已經得到m的百位和十位,易得個位數為m-i*100-j *10。
程式程式碼:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j, k;
int m = 100;
while (m<=999)
{
i = m / 100;
j = m / 10 - i * 10;
k = m - 100 * i - 10 * j;
if (m == i*i*i + j*j*j + k*k*k)
printf("%d\n", m);
m++;
}
system ("pause");
return 0;
}
輸出結果:
於是,100~999範圍內(三位數中)的“水仙花數”得到:153,370,371,407。
注:此題也可以用for迴圈來實現