问题描述
我正在尝试创建一个简单的程序,确定是否可以将数字写成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楼
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--;
在末尾。