使用Java打印出所有的水仙花數(shù)的解決方法
前言
水仙花數(shù)(Narcissistic number)也被稱為超完全數(shù)字不變數(shù)、自戀數(shù)、自冪數(shù),是指一個(gè) n 位數(shù) (n≥3),它的每個(gè)位上的數(shù)字的 n 次冪之和等于它本身。對(duì)于三位數(shù)而言,如果一個(gè)三位數(shù)的各位數(shù)字的立方和等于這個(gè)數(shù)本身,那么這個(gè)數(shù)就是水仙花數(shù)。
例如,153 是一個(gè)水仙花數(shù),因?yàn)?\(1^3 + 5^3 + 3^3 = 153\)。
本文將通過 Java 語言來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的程序,用于找出并打印所有三位數(shù)中的水仙花數(shù)。
實(shí)現(xiàn)思路
- 確定范圍:由于水仙花數(shù)是三位數(shù),因此我們的查找范圍是 100 到 999。
- 分解數(shù)字:對(duì)于每一個(gè)三位數(shù),我們需要將其分解為百位、十位和個(gè)位。
- 計(jì)算立方和:計(jì)算這三個(gè)位置上數(shù)字的立方和。
- 比較結(jié)果:如果計(jì)算出的立方和等于原數(shù),則該數(shù)為水仙花數(shù)。
- 輸出結(jié)果:將找到的所有水仙花數(shù)打印出來。
Java代碼實(shí)現(xiàn)
public class NarcissisticNumber {
public static void main(String[] args) {
// 遍歷100到999之間的所有數(shù)字
for (int num = 100; num <= 999; num++) {
if (isNarcissistic(num)) {
System.out.println(num);
}
}
}
/**
* 判斷一個(gè)數(shù)是否為水仙花數(shù)
* @param num 待判斷的數(shù)
* @return 如果是水仙花數(shù)返回true,否則返回false
*/
private static boolean isNarcissistic(int num) {
int originalNum = num;
int sum = 0;
// 分解數(shù)字并計(jì)算立方和
while (num > 0) {
int digit = num % 10;
sum += Math.pow(digit, 3);
num /= 10;
}
// 判斷立方和是否等于原數(shù)
return sum == originalNum;
}
}運(yùn)行結(jié)果
運(yùn)行上述代碼后,程序?qū)⑤敵鏊械娜粩?shù)水仙花數(shù):
153 370 371 407
下面是一個(gè)用Java編寫的示例代碼,用于找出并打印所有的水仙花數(shù)(即三位數(shù)中,其各個(gè)位上的數(shù)字立方和等于該數(shù)本身的數(shù))。
public class NarcissisticNumber {
public static void main(String[] args) {
// 遍歷所有三位數(shù),從100到999
for (int number = 100; number <= 999; number++) {
if (isNarcissistic(number)) {
System.out.println(number);
}
}
}
/**
* 判斷一個(gè)數(shù)是否是水仙花數(shù)
* @param number 要判斷的數(shù)
* @return 如果是水仙花數(shù)返回true,否則返回false
*/
public static boolean isNarcissistic(int number) {
int originalNumber = number;
int sum = 0;
// 提取每一位數(shù)字并計(jì)算立方和
while (number > 0) {
int digit = number % 10;
sum += Math.pow(digit, 3);
number /= 10;
}
// 判斷立方和是否等于原數(shù)
return sum == originalNumber;
}
}代碼解釋:

- 主方法
main?:
- 使用一個(gè) ?
?for?? 循環(huán)遍歷從100到999的所有三位數(shù)。 - 對(duì)于每個(gè)數(shù),調(diào)用 ?
?isNarcissistic?? 方法判斷它是否是水仙花數(shù)。 - 如果是水仙花數(shù),則打印該數(shù)。
- 輔助方法
isNarcissistic?:
- 接受一個(gè)整數(shù) ?
?number?? 作為參數(shù)。 - 保存原始數(shù) ?
?originalNumber??,以便后續(xù)比較。 - 使用 ?
?while?? 循環(huán)提取每一位數(shù)字,并計(jì)算其立方和。 - 最后,判斷立方和是否等于原始數(shù),如果是則返回 ?
?true??,否則返回 ??false??。
運(yùn)行結(jié)果:

運(yùn)行上述代碼后,輸出將是所有的水仙花數(shù):
153 370 371 407
這些數(shù)都是三位數(shù),并且它們各自的各位數(shù)字的立方和等于該數(shù)本身。希望這個(gè)示例對(duì)你有幫助!如果有任何問題或需要進(jìn)一步的解釋,請(qǐng)隨時(shí)告訴我。當(dāng)然可以!下面是一個(gè)詳細(xì)的Java程序,用于找出并打印所有的水仙花數(shù)。
什么是水仙花數(shù)?
水仙花數(shù)(Narcissistic number)是指一個(gè)三位數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153 是一個(gè)水仙花數(shù),因?yàn)椋?53 = 1^3 + 5^3 + 3^3
Java代碼實(shí)現(xiàn)
public class NarcissisticNumber {
public static void main(String[] args) {
// 遍歷所有三位數(shù),從100到999
for (int num = 100; num <= 999; num++) {
if (isNarcissistic(num)) {
System.out.println(num);
}
}
}
// 判斷一個(gè)數(shù)是否是水仙花數(shù)
public static boolean isNarcissistic(int num) {
int originalNum = num;
int sum = 0;
// 提取每一位數(shù)字并計(jì)算立方和
while (num > 0) {
int digit = num % 10; // 取出個(gè)位數(shù)
sum += Math.pow(digit, 3); // 計(jì)算立方并累加
num /= 10; // 去掉個(gè)位數(shù)
}
// 判斷立方和是否等于原數(shù)
return sum == originalNum;
}
}代碼解釋
- 主方法
main?:
- 使用一個(gè) ?
?for?? 循環(huán)遍歷所有三位數(shù),從100到999。 - 對(duì)于每一個(gè)數(shù),調(diào)用 ?
?isNarcissistic?? 方法判斷它是否是水仙花數(shù)。 - 如果是水仙花數(shù),則打印該數(shù)。
- 輔助方法
isNarcissistic?:
- 接受一個(gè)整數(shù) ?
?num?? 作為參數(shù)。 - 將原數(shù)保存在 ?
?originalNum?? 中,以便后續(xù)比較。 - 初始化 ?
?sum?? 為0,用于存儲(chǔ)各位數(shù)字的立方和。 - 使用 ?
?while?? 循環(huán)提取每一位數(shù)字:
- ?
?digit = num % 10??:取出當(dāng)前數(shù)的個(gè)位數(shù)。 - ?
?sum += Math.pow(digit, 3)??:計(jì)算該位數(shù)字的立方并累加到 ??sum??。 - ?
?num /= 10??:去掉當(dāng)前數(shù)的個(gè)位數(shù)。
- 最后,判斷 ?
?sum?? 是否等于 ??originalNum??,如果相等則返回 ??true??,否則返回 ??false??。
運(yùn)行結(jié)果
運(yùn)行上述程序,輸出將是所有三位數(shù)中的水仙花數(shù):
153 370 371 407
這些數(shù)都是滿足條件的水仙花數(shù)。希望這個(gè)解釋對(duì)你有幫助!如果有任何問題或需要進(jìn)一步的說明,請(qǐng)隨時(shí)告訴我。
以上就是使用Java打印出所有的水仙花數(shù)的解決方法的詳細(xì)內(nèi)容,更多關(guān)于Java打印水仙花數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
spring啟動(dòng)后保證創(chuàng)建的對(duì)象不被垃圾回收器回收
最近看到一個(gè)問題是,spring在啟動(dòng)后如何保證創(chuàng)建的對(duì)象不被垃圾回收器回收?。所以本文結(jié)合jvm的垃圾回收機(jī)制和spring中的源代碼做出自己的一點(diǎn)猜測(cè)。有需要的朋友們可以參考借鑒。2016-09-09
Spring Boot集成Java DSL的實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring Boot集成Java DSL的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
jenkins按模塊進(jìn)行構(gòu)建遇到的問題及解決方案
這篇文章主要介紹了jenkins按模塊進(jìn)行構(gòu)建的問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Spring Cloud負(fù)載均衡及遠(yuǎn)程調(diào)用實(shí)現(xiàn)詳解
這篇文章主要介紹了Spring Cloud負(fù)載均衡及遠(yuǎn)程調(diào)用實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot自動(dòng)配置的8個(gè)技巧分享
在 SpringBoot 2.x中,一個(gè)很核心的功能是自動(dòng)配置機(jī)制,這篇文章主要為大家詳細(xì)介紹了Spring Boot 2.x 實(shí)現(xiàn)自動(dòng)配置的8個(gè)技巧,希望對(duì)大家有所幫助2025-01-01
Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:考拉茲猜想 Collatz Conjecture
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:考拉茲猜想 Collatz Conjecture,本文直接給出實(shí)現(xiàn)代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下2015-06-06

