2018校招真題編程題(愛奇藝)迴文素數

題目描述
如果一個整數只能被1和自己整除,就稱這個數是素數。
如果一個數正着反着都是一樣,就稱爲這個數是迴文數。例如:6, 66, 606, 6666
如果一個數字既是素數也是迴文數,就稱這個數是迴文素數
牛牛現在給定一個區間[L, R],希望你能求出在這個區間內有多少個迴文素數。
輸入描述:
輸入包括一行,一行中有兩個整數(1 ≤ L ≤ R ≤ 1000)
輸出描述:
輸出一個整數,表示區間內迴文素數個數。
示例1
輸入
100 150
輸出
2

package com.qiye;

import java.util.Scanner;
import java.util.Stack;

public class PrimeAndCircleNum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        int y = scanner.nextInt();
        int count = 0;
        for(int i = x;i <=y;i ++){
            boolean isPrime = false;
            boolean isCircle = false;
            isPrime = judgePrime(i);
            isCircle = judgeCircle(i);
//            System.out.println("現在的i是:" + i +" 它是素數嗎? " + isPrime + " 它是迴文數嗎? " + isCircle);
            if(isPrime && isCircle){
                count++;
            }
        }
        System.out.println(count);
    }
    public static boolean judgePrime(int num){
        if(num < 2) return false;
        if(num == 2) return true;
        if(num % 2 == 0) return false;
        for(int i=3;i*i <= num;i += 2){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }
    public static boolean judgeCircle(int num){
        String s = num + "";
        char characters[] = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        for(int i=0;i < characters.length;i ++){
            stack.push(characters[i]);
        }
        String s1 = "";
        while (!stack.isEmpty()){
            s1 += stack.pop();
        }
        if(s1.equals(s)){
            return true;
        }
        return false;
    }
}

這題挺好的,兩個基本算法的綜合,迴文數和素數判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章