水仙花数
2018 校招真题字节跳动水仙花数
题目描述
请判断一个数是不是水仙花数,其中水仙花数是指一个 n 位数 (n>=3),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
输入
有多组测试数据,每组测试数据以包含一个整数 n(100<=n<=999),输入 0 表示程序输入结束。
输出
如果 n 是水仙花数就输出 Yes,否则输出 No。
样例输入
153
154
0
样例输出
Yes
No
Java 代码
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
while (n != 0) {
if (isShuiXianhua(n)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
n = scan.nextInt();
}
}
public static boolean isShuiXianhua(int n) {
int length = (n + "").length();
int temp = n;
int result = 0;
while (n != 0) {
result += Math.pow(n % 10, length);
n = n / 10;
}
if (temp == result) {
return true;
}
return false;
}
}
题目描述
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3。 现在要求输出所有在 m 和 n 范围内的水仙花数。
输入描述
输入数据有多组,每组占一行,包括两个整数 m 和 n。(100<=m<=n<=999)
输出描述
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于 m,并且小于等于 n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;如果给定的范围内不存在水仙花数,则输出 no;每个测试实例的输出占一行。
输入
100 120
300 380
输出
no
370 371
Java 代码
import java.io.IOException;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int[] number = {153, 370, 371, 407};
while (sc.hasNext()) {
int m = sc.nextInt();
int n = sc.nextInt();
String s = "";
for (int i = 0; i < number.length; i++) {
if (number[i] >= m && number[i] <= n) {
s = s + number[i] + " ";
}
}
if ("".equals(s)) {
System.out.println("no");
} else {
System.out.println(s.substring(0, s.length() - 1));
}
}
}
}
参考资料