挑战在于找到一个数字,其各个数字乘以连续递增的幂并相加,等于初始数字。
例如:取 89,将其拆分为 8 和 9,则 8^1 + 9^2 = 89
static List<Integer> sumDigPow(int a, int b) {
List<Integer> eureka = new ArrayList<Integer>(0);
List<String> digits = new ArrayList<String>();
String num;
int sum = 0, multi;
for (int i=a; i<=b; i++) {
num = String.valueOf(i);
digits.add(num);
for (int j=0; j<digits.size(); j++) {
multi = (int)Math.pow(Integer.parseInt(digits.get(j)), j+1);
sum += multi;
}
if (sum == i) eureka.add(i);
sum = 0;
digits.clear();
}
return eureka;
}
输入 1 和 100(范围),输出应该是 [1, 2, 3, 4, 5, 6, 7, 8, 9, 89],但我得到了所有数字[1, 2 ... 100].
我最近才开始学习 java,但似乎找不到代码中的问题。任何提示将不胜感激。
最佳答案
您可以使用以下内容:
static List<Integer> sumDigPow(int a, int b) {
List<Integer> eureka = new ArrayList<Integer>(0);
String num;
int sum = 0, multi;
for (int i = a; i <= b; i++) {
num = String.valueOf(i);
for (int j = 0; j < num.length(); j++) {
multi = (int) Math.pow(Character.getNumericValue(num.charAt(j)), j + 1);
sum += multi;
}
if (sum == i) {
eureka.add(i);
}
sum = 0;
}
return eureka;
}
解释:
- 您没有检查号码的第二位数字。
- 遍历 String
num
的每个字符。 - 不需要
digits
arraylist,你可以只使用 char 的 numeric 值。
关于java - 使用 arraylists 得到错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090501/