1. 程式人生 > >【C語言】輸出100~999之間的所有“水仙花數”

【C語言】輸出100~999之間的所有“水仙花數”

  “水仙花數”
  “水仙花數”又稱為“阿姆斯特朗數”。如果一個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迴圈來實現