简体   繁体   中英

Java program not outputting correct values

I'm trying to create a simple program that determines if a number can be written as n^x and what n and x are. Ex: 81 = 3^4. My program correctly identifies numbers that can be written as n^x but the values for n and x are way off. (this is just supposed to be an exercise). The logic in my coding is kind of confusing so here's basically what it is. First it finds a number that can divide into a (the chosen number), then it figures out if the a can be divided by the number until it reaches 1. Then it figures out how many times it takes to reach 1. I can't find any problems with the logic. Here's my code.

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");
    }
}
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");
    }
}

Use a do-while for the outer loop and you won't need i--; at the end.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM