水仙花數(Narcissistic Number),又稱超完全數字不變數,是指一個三位數,其各位數字的立方和等於該數本身。例如:153 = 1³ + 5³ + 3³ = 1 + 125 + 27 = 153。
本篇文章將透過 C 語言實作,找出 100 到 999 之間所有的水仙花數,並展示完整的程式碼與執行邏輯。
for(i = 100; i < 1000; i++) {
a = i % 10; // 取個位數
b = i / 10 % 10; // 取十位數
c = i / 100; // 取百位數
if(i == a*a*a + b*b*b + c*c*c) {
num[k++] = i; // 是水仙花數
} else {
cout[l++] = i; // 非水仙花數
}
}
注意: 原始碼中迴圈條件為 i < 200,僅檢查到 199。正確應為 i < 1000 以涵蓋所有三位數。
#include <stdio.h>
int main() {
int i, a, b, c;
int k = 0, l = 0;
int num[100], cout[100];
for(i = 100; i < 1000; i++) {
a = i % 10;
b = i / 10 % 10;
c = i / 100;
if(i == a*a*a + b*b*b + c*c*c) {
num[k++] = i;
} else {
cout[l++] = i;
}
}
printf("水仙花數:\n");
for(i = 0; i < k; i++) {
printf("%d\n", num[i]);
}
printf("不是水仙花數:\n");
for(i = 0; i < l; i++) {
printf("%d\n", cout[i]);
}
return 0;
}
程式執行後將輸出四個水仙花數:
153 370 371 407
水仙花數的概念可推廣到 n 位數:若一個 n 位數等於其各位數字的 n 次方和,則稱為 n 位水仙花數。讀者可嘗試修改程式,尋找四位數的水仙花數(如 1634、8208、9474)。