java - 找到最小的数字 K (如果存在),使其数字的乘积为 N。例如 :when N = 6, 最小的数字是 k=16(1*6=6) 而不是 k=23(2*3=6)

标签 java

我使用java中的数组概念编写了这个程序。我在尝试生成产品时收到 ArrayIndexOutOfBound 异常。

我创建了函数generateFNos(int max)来生成给定数字的因子。例如,数字 6 将有因数 1、2、3、6。现在,我尝试将第一个数字和最后一个数字组合起来,使乘积等于 6。 我现在还没有使用在该数组中查找最小数字的逻辑。我稍后会做。

问题是为什么我收到 ArrayIndexOutOfBound 异常? [我无法弄清楚]

下面是我的代码

public class SmallestNoProduct {

    public static void generateFNos(int max) {
        int ar[] = new int[max];
        int k = 0;
        for (int i = 1; i <= max; i++) {
            if (max % i == 0) {
                ar[k] = i;
                k++;
            }
        }
        smallestNoProduct(ar);
    }

    public static void smallestNoProduct(int x[]) {
        int j[] = new int[x.length];
        int p = x.length;
        for (int d = 0; d < p / 2;) {
            String t = x[d++] + "" + x[p--];
            int i = Integer.parseInt(t);
            j[d] = i;
        }
        for (int u = 0; u < j.length; u++) {
            System.out.println(j[u]);
        }
    }

    public static void main(String s[]) {
        generateFNos(6);
    }
}
****OutputShown****

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at SmallestNoProduct.smallestNoProduct(SmallestNoProduct.java:36)
    at SmallestNoProduct.generateFNos(SmallestNoProduct.java:27)
    at SmallestNoProduct.main(SmallestNoProduct.java:52)

@编辑

仅使用数组的改进代码。

public class SmallestNoProduct {
    public static void generateFNos(int max) {
        int s = 0;
        int ar[] = new int[max];
        int k = 0;
        for (int i = 1; i <= max; i++) {
            if (max % i == 0) {
                ar[k] = i;
                k++;
                s++;
            }
        }
        for (int g = 0; g < s; g++) {
            System.out.println(ar[g]);
        }
        smallestNoProduct(ar, s);
    }

    public static void smallestNoProduct(int x[], int s) {
        int j[] = new int[x.length];

        int p = s - 1;
        for (int d = 0; d < p;) {
            String t = x[d++] + "" + x[p--];
            System.out.println(t);

            int i = Integer.parseInt(t);
            j[d] = i;
        }
        /*for (int u = 0; u < j.length; u++) {
            System.out.println(j[u]);
        }*/
    }

    public static void main(String s[]) {
        generateFNos(6);
    }
}

最佳答案

也许更好:

public class SmallestNoProduct {

    public static int smallest(int n) {
        int small = n*n;
        for(int i = 1; i < Math.sqrt(n); i++) {
            if(n%i == 0) {
                int temp = Integer.parseInt(""+i+""+n/i);
                int temp2 = Integer.parseInt(""+n/i+""+i);
                temp = temp2 < temp? temp2: temp;
                if(temp < small) {
                    small = temp;
                }
            }
        }
        return small;
    }

    public static void main(String[] args) {
        System.out.println(smallest(6));  //6
        System.out.println(smallest(10)); //25
        System.out.println(smallest(100)); //205
    }

}

关于java - 找到最小的数字 K (如果存在),使其数字的乘积为 N。例如 :when N = 6, 最小的数字是 k=16(1*6=6) 而不是 k=23(2*3=6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771754/

相关文章:

java - 从自定义 Web 服务器迁移到 apache Web 服务器

java - 处理多个 boolean 组合

java - 判断我是在 32 位还是 64 位 JVM 中运行的方法

java - Xpath 选择器不适用于(大概)Ajax 控制

java - 将 JAR 上传到数据库

java - hql - 按列表的第一项排序

java - 了解 DatabaseMetaData 的方法

java - EclipseLinkJpaVendorAdapter 而不是 HibernateJpaVendorAdapter 问题

java - 在android中存储不同的密码

java - 从 Activity 访问 Fragment 的 View