水仙花數(Narcissistic number)是指一個三位數,其各位數字的立方和等于該數本身。例如:153 是一個水仙花數,因為 (1^3 + 5^3 + 3^3 = 153)。
以下是一個用 C 語言打印出所有三位數水仙花數的程序:
代碼實現
#include <stdio.h>int main() {int num; // 用于遍歷所有三位數int hundreds, tens, units; // 分別表示百位、十位和個位printf("三位數的水仙花數有:\n");// 遍歷所有三位數(100 到 999)for (num = 100; num <= 999; num++) {// 提取百位、十位和個位hundreds = num / 100; // 百位tens = (num / 10) % 10; // 十位units = num % 10; // 個位// 判斷是否為水仙花數if (hundreds * hundreds * hundreds + tens * tens * tens + units * units * units == num) {printf("%d\n", num); // 打印水仙花數}}return 0;
}
代碼解析
-
遍歷范圍:
- 水仙花數是三位數,因此我們只需要遍歷從 100 到 999 的所有整數。
-
提取數字的每一位:
- 使用整數除法和取模運算分別提取百位、十位和個位:
hundreds = num / 100
:獲取百位。tens = (num / 10) % 10
:獲取十位。units = num % 10
:獲取個位。
- 使用整數除法和取模運算分別提取百位、十位和個位:
-
判斷條件:
- 判斷該數是否滿足水仙花數的定義:( \text{百位}^3 + \text{十位}^3 + \text{個位}^3 = \text{原數} )。
-
輸出結果:
- 如果滿足條件,則打印該數。
運行結果
運行上述程序后,輸出的結果將是:
三位數的水仙花數有:
153
370
371
407
擴展
如果想擴展到更多位數的水仙花數(如四位數或五位數),可以將邏輯推廣到任意位數。例如,對于四位數的水仙花數,需要計算每位數字的四次方之和是否等于該數本身。
以下是擴展版本的代碼示例:
#include <stdio.h>
#include <math.h>int main() {int num, temp, digit, sum, digits;printf("任意位數的水仙花數有:\n");for (num = 100; num <= 99999; num++) { // 遍歷更大的范圍temp = num;sum = 0;digits = 0;// 計算數字的位數while (temp > 0) {digits++;temp /= 10;}temp = num;// 計算每位數字的冪次和while (temp > 0) {digit = temp % 10;sum += pow(digit, digits);temp /= 10;}// 判斷是否為水仙花數if (sum == num) {printf("%d\n", num);}}return 0;
}
通過這些代碼,你可以輕松理解和實現水仙花數的查找,并進一步擴展到更復雜的場景!