要开始说声嗨!我是新来的,希望有人可以指导我解决我的问题。

我必须找到一个既是素数又是回文数的数字
如:


  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++)

09-27 18:12