Java程序未输出正确的值

时间:2019-02-13 20:25:41

标签: java

我正在尝试创建一个简单的程序,该程序确定数字是否可以写为n ^ x以及n和x是什么。例如:81 = 3 ^ 4。我的程序正确识别了可以写为n ^ x的数字,但是n和x的值相去甚远。 (这只是一种练习)。我的编码中的逻辑有点令人困惑,所以这基本上是什么。首先,它找到一个可以除以a(选定的数字)的数字,然后确定是否可以将a除以该数字直至达到1。然后确定达到1所需的次数。找不到逻辑上的任何问题。这是我的代码。

public static void main(String[] args) {

    Scanner scan1 = new Scanner(System.in);
    int a = scan1.nextInt();
    scan1.close();
    int i = 2;
    boolean y = false;
    int x = 0;

    for (; i <= Math.sqrt(a); i++) {
        if (a % i == 0) {
            int n = i;
            for (; n <= a; n *= i) {
                if (a % n != 0) {
                    y = false;
                    break;
                }
                x++;
                y = true;
            }
        }
    }

    if (y == true) {
        System.out.println(a + " = " + i + " ^ " + x);
    }
    else {
        System.out.println("Your number cannot be represented as n^x");
    }
}

1 个答案:

答案 0 :(得分:0)

public static void main(String[] args) {

    Scanner scan1 = new Scanner(System.in);
    int a = scan1.nextInt();
    scan1.close();
    int i = 2;
    boolean y = false;
    int x = 0;

    for(; i <= Math.sqrt(a); i++) {
        if (a % i == 0) {
            int n = i;
            for (; n <= a; n *= i) {
                if (a % n != 0) {
                    y = false;
                } 
                y = true;
                x = n;
                break;
            }
        }
    }

    i--;

    if (y == true) {
        System.out.println(a + " = " + i + " ^ " + x);
    }
    else {
        System.out.println("Your number cannot be represented as n^x");
    }
}

在外部循环中使用do-while,最后不需要i--;