嗨,我想打印用户输入的{2个数字之间的所有回文素数

时间:2016-03-19 03:34:24

标签: java primes palindrome

所以,我完成了第一部分和大部分第二部分,但无法弄清楚如何做Palindromic primes,所以请帮忙。我附加的代码是p1b,我不知道在p1c中该怎么做所以请帮忙。

予。介绍: 该项目的目的是帮助您学习基本的JAVA编程语言 基于您从CSC114获得的C / C ++背景的元素。

II。作业:根据以下步骤开发JAVA程序: A部分:将此步骤命名为p1a.java,您不需要编写除main之外的其他方法 为了这。 1)要求用户输入一个整数,程序将产生相反的结果 这个数字。 示例如下: 请输入一个整数:2341 2341的反面是1432

B部分:将此步骤命名为p1b.java。 1)使用名为reverse的方法修改最后一步,返回反向值 给定的整数。然后,修改程序,使其运行如下: 2)要求用户输入两个整数,比如说x和y; 3)只要x小于y,您的程序将执行以下操作: a)查找并打印x和y之间的所有素数。 (需要一个叫做的方法 isPrime检查给定的数字是否为素数。) b)查找并打印所有也是回文的素数; c)要求另一对x和y。 示例如下: 请输入两个整数:5 400 主要:  5 7 11 13 17 19 23 29 31 37  41 43 47 53 59 61 67 71 73 79  83 89 97 101 103 107 109 113 127 131  137 139 149 151 157 163 167 173 179 181  191 193 197 199 211 223 227 229 233 239  241 251 257 263 269 271 277 281 283 293  307 311 313 317 331 337 347 349 353 359  367 373 379 383 389 397 Palindromic Prime:  5 7 11 101 131 151 181 191 313 353  373 383 请输入两个整数:9 1 的 完成

C部分:将此步骤命名为p1c.java。 1)传统上,为了产生上述输出,通常是一种方法 我要经历两次数字:第一次是找到并打印所有素数 数字,然后再次通过数字找到并打印所有回文 素数。但是,如果我们能够保留结果然后打印出来的话 过程完成后,只需要1次通过。 2)此外,请以格式化方式显示输出(例如对齐输出 在上一页)。 3)修改p1b.java,使其仅通过一次传递以产生相同的结果 如B部分所述。

import java.util.Scanner;

public class p1b {

    public static void main(String[] args) {    
        System.out.println("Program for Finding Primem Numbers: ");
        System.out.println("==================================");   
        Scanner input = new Scanner(System.in);

        int num1, num2, i;
        int choice;
        System.out.print("Please enter the first number: ");
        num1 = input.nextInt();
        System.out.print("Please enter the Second number: ");
        num2 = input.nextInt();

        if (num1 > num2) {
            System.out.println("        Thank you.");
            System.exit(1); 
        }
        System.out.println( isPrime(num1, num2));
        System.out.println( reverse(num1));

        System.out.print("\nWould you like to enter two more numbers, "
                + "Enter 1 for Yes or 0 for No: ");
        choice = input.nextInt();
        if(choice == 1) {
            System.out.print("Please enter the first number: ");
            num1 = input.nextInt();
            System.out.print("Please enter the Second number: ");
            num2 = input.nextInt();
            System.out.println( isPrime(num1, num2));
        }

        if(choice == 0) {
            System.out.println("Bye!!");
            System.exit(0);
        }
    }

    public static int isPrime(int num1, int num2) {
        final int displayPerLine = 50;
        System.out.print("Prime: ");
        for ( int i = num1; i <= num2; i++ ) {
            int j;
            for ( j = 2; j < i; j++) {
                int number = i % j;
                if (number == 0) {
                    break;
                    //return n;
                }   
            }
            if(i == j) {
                System.out.printf("%-5d " + i);
            }
            if (i % displayPerLine == 0) {
                System.out.println();
            }
        }
        System.out.println();
            return num1;
    }

    //public static int reverse(int num1, int num2) {
    public static int reverse(int num1, int num2) {
        System.out.print("Palindrome: ");
        int palindrome = num1; // copied number into variable
        int reverse = palindrome;

        while (palindrome != 0) {
            int remainder = palindrome % 10;
            reverse = reverse * 10 + remainder;
            palindrome = palindrome / 10;
        }
        // if original and reverse of number is equal means
        // number is palindrome in Java
        if (num1 == reverse) {
            return reverse;
        }
        return palindrome;        
    }

    public static int reverse(int num) {
        int test = 0;           
        while (num != 0) {
            int lastdigit = num % 10;           
            test = test * 10 + lastdigit;
            num = num / 10;
        }
        return test;
    }       

    public static boolean isPalindrome(int num) {
        return num == reverse(num);
    }
}

1 个答案:

答案 0 :(得分:2)

让我们从修复files=(*) for f in *.*; do numf=$(grep -o "${f%.*}" <<< "${files[*]}" | wc -l) [ $numf -gt 1 ] && cat "${f}" >> "${f%.*}" done 开始,首先测试数字是否均匀;如果是这样,它不是素数。接下来,测试从3到数字平方根的奇数。如果这些都不是因素,那么这个数字就是素数。像,

isPrime

然后我们可以使用public static boolean isPrime(int i) { if (i % 2 == 0) { return false; } double sqrt = Math.sqrt(i); for (int t = 3; t <= sqrt; t += 2) { if (i % t == 0) { return false; } } return true; } 之类的

来实现isPalindrome
StringBuilder

最后,我们可以在无限(这里是一个public static boolean isPalindrome(int i) { String str = String.valueOf(i); return new StringBuilder(str).reverse().toString().equals(str); } )循环中提示输入,并使用内部while循环来打印也是 palindromes的 primes 。并且,您可以使用forMath.max分别获取最大值和最小值。像,

Math.min