先上代码: public static void main(String[] args) { Scanner in = new Scanner(System.in); int inputNum = in.nextInt(); //取位数 int pos = 0; int temp = inputNum; while (temp / 10 != 0) { ++pos; temp = temp / 10; } for (int poss = pos; poss > 1; poss--) { for (int index = inputNum; index > 10; index--) { List<Double> nums = new ArrayList<>(); //存放各个位数 for (int i = 0; i <= poss; i++) { nums.add(Math.floor(index / Math.pow(10, poss - i) % 10)); } //计算和 double sum = 0.0; for (Double num : nums) { sum += Math.pow(num, poss + 1); } //4150和4151是特殊情况 //当pos=5时,4^5+1^5+5^5+1^5=4150 //其实4150当时pos=4才对,所以把这两个数排除 if (sum == index) { if (sum == 4150 || sum == 4151) continue; System.out.println(index); } } } }
pass:该题效率较低,欢迎大佬提供建议~