C語言水仙花數,阿姆斯特朗數

2020-07-16 10:04:30
阿姆斯特朗數也就是俗稱的水仙花數,是指一個三位數,其各位數位的立方和等於該數本身。例如:153=13+53+33,所以 153 就是一個水仙花數。求出所有的水仙花數。

演算法思想

對於阿姆斯特朗數問題,根據水仙花數的定義,需要分離出個位數、十位數和百位數。然後按其性質進行計算並判斷,滿足條件則列印輸出,否則不列印輸出。

因此,阿姆斯特朗數問題可以利用迴圈語句解決。設迴圈變數為 i,初值為 100,i 從 100 變化到 1000;依次判斷條件是否成立,如果成立則輸出,否則不輸出。

演算法思想具體如下:
① 分離出個位數,算術表示式為:j=i%10。
② 分離出十位數,算術表示式為:k=i/10%10。
③ 分離出百位數,算術表示式為:n=i/100。
④ 判斷條件是否成立。若是,執行步驟 ⑤;若不是,執行步驟 ⑥。
⑤ 列印輸出結果。
⑥ i 自增 1。
⑦ 轉到 ① 執行,直到 i 等於 1000。

其判斷的條件為:j*j*j+k*k*k+n*n*n==i。

程式程式碼

#include <stdio.h>
int main()
{
    int i,j,k,n;
    for(i=100;i<1000;i++)
    {
        j=i%10;
        k=i/10%10;
        n=i/100;
        if(j*j*j+k*k*k+n*n*n==i)
            printf("%5dn",i);
    }
    return 0;
}

偵錯執行結果

所有的阿姆斯特朗數,如下所示:
  153
  370
  371
  407

總結

實訓中需注意的是在分離個位數、十位數和百位數時,算術運算子的選擇。要清楚每一種算術運算子的運算規則和結合性,再根據題意選擇合適的算術運算子進行運算。在本範例中使用了除法運算子“/”和求餘運算子(模運算子)“%”。

在程式中由於迴圈體的語句不止一句,因此我們在使用時必須用“{}”括起來,組成複合語句進行使用。在程式中應把複合語句看成是單條語句而不是多條語句,複合語句內的各條語句都必須以分號“;”結尾;此外,在括號“}”外不能加分號。一般複合語句用於要執行某段特殊功能的程式如 for 語句、if 語句或 while 語句等。