说明: 水仙花数是指, 三位正整数中, 各位数的立方和等于本身的数. 例: 153 = 1×1×1 + 5×5×5 + 3×3×3
//使用的是三种方法吗
package com.no1;
import java.util.Arrays;
/**
*
1. 输出所有水仙花数
说明: 水仙花数是指, 三位正整数中, 各位数的立方和等于本身的数.
例: 153 = 1×1×1 + 5×5×5 + 3×3×3
* @author admin
*
*/
public class Test {
public static void main(String[] args) {
//循环, 遍历100~999
for (int i = 100; i < 1000; i++) {
//判断, 是否是水仙花数
if(check(i)) { //是, 则输出
System.out.println(i);
}
}
}
/**
* 检查, 是否是水仙花数
* @param n 待检查的数
* @return true / false
*/
private static boolean check(int n) {
//拆分
// int a = n % 10;
// int b = n / 10 % 10;
// int c = n / 100 % 10;
int[] arr = split(n);
//求立方和
// int sum = a*a*a + b*b*b + c*c*c;
double sum = 0;
//循环, 遍历数组, 求和
for (int i = 0; i < arr.length; i++) {
// sum += Math.pow(arr[i], arr.length);
sum += power(arr[i], arr.length);
}
//判断结果
return sum == n;
}
private static int power(int n, int p) {
int product = n;
for (int i = 1; i < p; i++) {
product *= n;
}
return product;
}
private static int[] split(int n) {
int[] arr = new int[1];
arr[0] = n % 10;
while(true) {
n /= 10;
if(n == 0) break;
arr = Arrays.copyOf(arr, arr.length+1);
arr[arr.length-1] = n % 10;
}
return arr;
}
}