题解 | #水仙花数#
水仙花数
http://www.nowcoder.com/practice/11c9f023a9f84418a15b48792a5f7c70
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
/**
* 水仙花数 x
* m <= x <= n
* 输出 m n 范围内的所有水仙花数
*/
public static void main(String[] args) {
run();
}
static void run() {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
String[] inputs = sc.nextLine().split(" ");
int m = Integer.parseInt(inputs[0]);
int n = Integer.parseInt(inputs[1]);
if (n < m) {
System.out.println("no");
continue;
}
// 存放水仙花数
List<Integer> res = new ArrayList<>();
for (int i = m; i <= n; i++) {
if (isWaterNum(i)) {
res.add(i);
}
}
int size = res.size();
if (size == 0) {
System.out.println("no");
continue;
}
// 打印水仙花数
for (int i = 0; i < size; i++) {
if (i != size - 1) {
System.out.print(res.get(i) + " ");
} else {
System.out.println(res.get(i));
}
}
}
}
/**
* 判断一个数是否是水仙花数
* @param num
* @return
*/
static boolean isWaterNum(int num) {
String res = num + "";
String[] nums = res.split("");
int n = nums.length;
if (n != 3) {
return false;
}
int sum = 0;
for (String s : nums) {
sum += to3(Integer.parseInt(s));
}
return sum == num;
}
/**
* 求一个数的三次方
* @param num
* @return
*/
static int to3(int num) {
int res = 1;
for (int i = 0; i < 3; i++) {
res *= num;
}
return res;
}
}