题目描述
所谓 水仙花数,是指一个 n n n 位的正整数,其各位数字的 n n n 次方和等于该数本身。
例如153是水仙花数,153是一个3位数,并且 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33。
输入描述
第一行输入一个整数 n n n,表示一个n位的正整数。 n n n 在3到7之间,包含3和7。
第二行输入一个整数 m m m,表示需要返回第 m m m 个水仙花数。
输出描述
返回长度是 n n n 的第 m m m 个水仙花数。个数从0开始编号。
若 m m m 大于水仙花数的个数,返回最后一个水仙花数和 m m m 的乘积。
若输入不合法,返回-1。
示例1
输入
3
0
输出
153
说明
153是第一个水仙花数.
示例2
输入
9
1
输出
-1
说明
9超出范围
题解
水仙花数较少
直接修改为常量
源码 Java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 预先存储的水仙花数表
Map<Integer, int[]> table = new HashMap<>();
table.put(3, new int[]{153, 370, 371, 407});
table.put(4, new int[]{1634, 8208, 9474});
table.put(5, new int[]{54748, 92727, 93084});
table.put(6, new int[]{548834});
table.put(7, new int[]{1741725, 4210818, 9800817, 9926315});
// 创建扫描器获取用户输入
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
// 检查 n 是否在 3 到 7 之间,或者 m 是否为负数
if (n < 3 || n > 7 || m < 0) {
System.out.println(-1); // 非法输入
} else if (m >= table.get(n).length) {
// 如果 m 超出该位数水仙花数的数量,输出最后一个水仙花数乘以 m
System.out.println((long)table.get(n)[table.get(n).length - 1] * m);
} else {
// 否则,输出第 m 个水仙花数
System.out.println(table.get(n)[m]);
}
// 关闭扫描器
scanner.close();
}
}