上一篇
Java水仙花数代码如何写?
- 后端开发
- 2025-06-19
- 2654
用Java编写水仙花数程序:遍历100-999,计算每位数字的立方和,若等于原数则输出,核心步骤包括数字拆分、幂运算和结果验证。
在Java中,水仙花数(Narcissistic Number)是指一个n位数,其各位数字的n次方之和等于该数本身,例如153 = 1³ + 5³ + 3³,以下是两种实现方法:
方法1:基础实现(仅三位数)
public class NarcissisticNumber { public static void main(String[] args) { System.out.println("三位数水仙花数:"); for (int num = 100; num < 1000; num++) { int digit1 = num / 100; // 百位 int digit2 = (num % 100) / 10; // 十位 int digit3 = num % 10; // 个位 // 计算立方和 int sum = digit1*digit1*digit1 + digit2*digit2*digit2 + digit3*digit3*digit3; if (sum == num) { System.out.println(num); } } } }
输出结果:
153
370
371
407
方法2:通用实现(任意位数)
public class NarcissisticNumber { public static void main(String[] args) { System.out.println("0-9999的水仙花数:"); for (int num = 0; num <= 9999; num++) { String numStr = Integer.toString(num); int n = numStr.length(); // 位数 int sum = 0; // 逐位计算n次方和 for (int i = 0; i < n; i++) { int digit = numStr.charAt(i) - '0'; sum += Math.pow(digit, n); } if (sum == num) { System.out.println(num); } } } }
输出结果:
0
1
2
3
4
5
6
7
8
9
153
370
371
407
1634
8208
9474
关键说明:
- 基础方法:直接数学运算,仅适用于三位数,效率高。
- 通用方法:
- 通过字符串转换获取数字位数
- 使用
Math.pow()
计算幂次 - 支持任意位数(示例范围0-9999)
- 特殊说明:
- 0-9是1位数水仙花数(数学定义)
- 1634是四位数水仙花数(1⁴+6⁴+3⁴+4⁴=1634)
优化建议:
- 大范围计算时,可缓存幂次结果提升性能
- 通过
Scanner
接收用户输入的自定义范围 - 使用
BigInteger
处理超大型数字(10位以上)
引用说明:水仙花数定义参考数论基本概念,代码实现基于Java标准数学运算。