使用Java解決 - 打印出所有的水仙花數
前言
水仙花數(Narcissistic number)也被稱為超完全數字不變數、自戀數、自冪數,是指一個 n 位數 (n≥3),它的每個位上的數字的 n 次冪之和等於它本身。對於三位數而言,如果一個三位數的各位數字的立方和等於這個數本身,那麼這個數就是水仙花數。
例如,153 是一個水仙花數,因為 \(1^3 + 5^3 + 3^3 = 153\)。
本文將通過 Java 語言來實現一個簡單的程序,用於找出並打印所有三位數中的水仙花數。
實現思路
- 確定範圍:由於水仙花數是三位數,因此我們的查找範圍是 100 到 999。
- 分解數字:對於每一個三位數,我們需要將其分解為百位、十位和個位。
- 計算立方和:計算這三個位置上數字的立方和。
- 比較結果:如果計算出的立方和等於原數,則該數為水仙花數。
- 輸出結果:將找到的所有水仙花數打印出來。
Java代碼實現
public class NarcissisticNumber {
public static void main(String[] args) {
// 遍歷100到999之間的所有數字
for (int num = 100; num <= 999; num++) {
if (isNarcissistic(num)) {
System.out.println(num);
}
}
}
/**
* 判斷一個數是否為水仙花數
* @param num 待判斷的數
* @return 如果是水仙花數返回true,否則返回false
*/
private static boolean isNarcissistic(int num) {
int originalNum = num;
int sum = 0;
// 分解數字並計算立方和
while (num > 0) {
int digit = num % 10;
sum += Math.pow(digit, 3);
num /= 10;
}
// 判斷立方和是否等於原數
return sum == originalNum;
}
}
運行結果
運行上述代碼後,程序將輸出所有的三位數水仙花數:
153
370
371
407
下面是一個用Java編寫的示例代碼,用於找出並打印所有的水仙花數(即三位數中,其各個位上的數字立方和等於該數本身的數)。
public class NarcissisticNumber {
public static void main(String[] args) {
// 遍歷所有三位數,從100到999
for (int number = 100; number <= 999; number++) {
if (isNarcissistic(number)) {
System.out.println(number);
}
}
}
/**
* 判斷一個數是否是水仙花數
* @param number 要判斷的數
* @return 如果是水仙花數返回true,否則返回false
*/
public static boolean isNarcissistic(int number) {
int originalNumber = number;
int sum = 0;
// 提取每一位數字並計算立方和
while (number > 0) {
int digit = number % 10;
sum += Math.pow(digit, 3);
number /= 10;
}
// 判斷立方和是否等於原數
return sum == originalNumber;
}
}
代碼解釋:
- 主方法
main:
- 使用一個
for循環遍歷從100到999的所有三位數。 - 對於每個數,調用
isNarcissistic方法判斷它是否是水仙花數。 - 如果是水仙花數,則打印該數。
- 輔助方法
isNarcissistic:
- 接受一個整數
number作為參數。 - 保存原始數
originalNumber,以便後續比較。 - 使用
while循環提取每一位數字,並計算其立方和。 - 最後,判斷立方和是否等於原始數,如果是則返回
true,否則返回false。
運行結果:
運行上述代碼後,輸出將是所有的水仙花數:
153
370
371
407
這些數都是三位數,並且它們各自的各位數字的立方和等於該數本身。希望這個示例對你有幫助!如果有任何問題或需要進一步的解釋,請隨時告訴我。當然可以!下面是一個詳細的Java程序,用於找出並打印所有的水仙花數。
什麼是水仙花數?
水仙花數(Narcissistic number)是指一個三位數,其各位數字的立方和等於該數本身。例如,153 是一個水仙花數,因為: \[ 153 = 1^3 + 5^3 + 3^3 \]
Java代碼實現
public class NarcissisticNumber {
public static void main(String[] args) {
// 遍歷所有三位數,從100到999
for (int num = 100; num <= 999; num++) {
if (isNarcissistic(num)) {
System.out.println(num);
}
}
}
// 判斷一個數是否是水仙花數
public static boolean isNarcissistic(int num) {
int originalNum = num;
int sum = 0;
// 提取每一位數字並計算立方和
while (num > 0) {
int digit = num % 10; // 取出個位數
sum += Math.pow(digit, 3); // 計算立方並累加
num /= 10; // 去掉個位數
}
// 判斷立方和是否等於原數
return sum == originalNum;
}
}
代碼解釋
- 主方法
main:
- 使用一個
for循環遍歷所有三位數,從100到999。 - 對於每一個數,調用
isNarcissistic方法判斷它是否是水仙花數。 - 如果是水仙花數,則打印該數。
- 輔助方法
isNarcissistic:
- 接受一個整數
num作為參數。 - 將原數保存在
originalNum中,以便後續比較。 - 初始化
sum為0,用於存儲各位數字的立方和。 - 使用
while循環提取每一位數字:
digit = num % 10:取出當前數的個位數。sum += Math.pow(digit, 3):計算該位數字的立方並累加到sum。num /= 10:去掉當前數的個位數。
- 最後,判斷
sum是否等於originalNum,如果相等則返回true,否則返回false。
運行結果
運行上述程序,輸出將是所有三位數中的水仙花數:
153
370
371
407
這些數都是滿足條件的水仙花數。希望這個解釋對你有幫助!如果有任何問題或需要進一步的説明,請隨時告訴我。