算法描述
水仙花数是一个n(>=3)位数字的数,它等于每个数字的n次幂之和 列如153分别是1 5 3 这几个数的立方之和
算法实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
public int[] narcissisticNumber(int endNum) {
return IntStream.range(100, endNum).parallel() .filter(n -> isNarcissistic(n)) .toArray(); }
private boolean isNarcissistic(int n) { String[] array = String.valueOf(n).split(""); int sum = Arrays.stream(array) .mapToInt(i -> nPower(Integer.valueOf(i), array.length)) .sum(); return sum == n; }
public int nPower(int i, int n) { int sum = 1; while (n > 0) { sum *= i; n--; } return sum; }
|
测试
1 2 3 4 5 6 7 8
|
@Test public void test() { int[] ints = narcissisticNumber(1_0000_0000); Arrays.stream(ints).forEach(System.out::println); }
|
输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 153 370 371 407 1634 8208 9474 54748 92727 93084 548834 1741725 4210818 9800817 9926315 24678050 24678051 88593477
|