要开始说声嗨!我是新来的,希望有人可以指导我解决我的问题。
我必须找到一个既是素数又是回文数的数字
如:
2 3 5 7 11 101 131 151 181 191 313 353 373 383 383 727 757 797 797 919 929
我认为我的问题出在我的reverse()
方法中,因为当我尝试比较if
语句中的数字时,对于option1
它将显示素数以及其他数字。试图现在获得前20个。
任何帮助,将不胜感激。
抱歉,如果代码混乱,请花几个小时进行研究。
import java.util.Scanner;
public class PalindromePrimeAndMirrorPrime {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String menu = " 1. Display Prime Palindrome"
+ "\n 2. Display mirrored primes"
+ "\n 3. Exit Program";
System.out.println(menu);
int choice = in.nextInt();
//menu((option1(20)));
//reverse(562897498);
//option1(20);
option1(20);
}
public static boolean prime(int num) {
for (int divisor = 2; divisor <= num / 2; divisor++) {
if (num % divisor == 0) {
return false;
}
}
return true;
}
public static void option1(int y){
int numPerLine=10;
int count =0;
int num = 2;
while(count <= y){
if(prime(num) && num == reverse(num)){ //main issue is here i think it doesnt compare it properly?
count++;
System.out.print(num + " ");
if(count%numPerLine==0){
System.out.println("");
}
}
num++;
}
}
public static int reverse(int x){
int y = x;
while(y!=0){
System.out.print(y%10 + "");
y/=10;
}
//System.out.println();
return x;
}
}
最佳答案
是的,您的问题在于反向功能
public static int reverse(int x){
int y = x;
while(y!=0){
System.out.print(y%10 + "");
y/=10;
}
//System.out.println();
return x;
}
您实际上不是在反转
x
,而是返回相同的值。您可能想要创建一个反向编号,然后将其返回。
public static int reverse(int x){
int y = 0;//create the reveresed number here
while(x!=0){
y = y * 10 + x % 10;
x/=10;
}
return y;
}
对
isPrime
的一个小优化是检查直到它的平方根而不是/2
。for (int divisor = 2; divisor * divisor <= num; divisor++)