java - 使用 arraylists 得到错误的输出

标签 java arrays algorithm arraylist design-patterns

挑战在于找到一个数字,其各个数字乘以连续递增的幂并相加,等于初始数字。

例如:取 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;
}

解释:

  1. 您没有检查号码的第二位数字。
  2. 遍历 String num 的每个字符。
  3. 不需要 digits arraylist,你可以只使用 char 的 numeric 值。

关于java - 使用 arraylists 得到错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090501/

相关文章:

java - 如何在一个 Maven 命令中执行多个目标,但每个目标有不同的参数

java - 在构建路径中组合项目对 servlet 的影响

python - 如何使用线程检索子数组

javascript - 如何在两个不同的数组上获得总长度或计数

javascript - 如何在 JavaScript 中比较数组?

python - 加权页面排名图表示

python - 减少由 bool 运算符定义的嵌套字典

c++ - 我如何解决 Codeforces Beta 第 12 轮问题 D?

Java Applet 不适用于 Eclipse 中的任何代码

java - 如何在通用绑定(bind)上获取 TYPE_USE 注释