【问题标题】:How to print all the palindromic numbers?如何打印所有回文数?
【发布时间】:2020-02-25 22:25:52
【问题描述】:

这里是 Java 新手。我找到了所有素数,直到某个数字(用户给出),但我现在找到回文数。我尝试了一些方法,但似乎都把主要部分搞砸了。

【问题讨论】:

  • 我会把你的主要检查和回文检查分成两种方法(单一责任原则:做一件事,做好)。然后,在你的循环中首先检查它是否是素数,如果是,检查它是否是回文数。这也应该更有效,因为您减少了回文检查的数量(或素数检查的数量,具体取决于您执行检查的顺序。回文检查可能比测试素数更便宜,所以我会先测试)
  • 您可能想考虑使用String[] digits = number.toString().split("")
  • 检查回文的一种简单方法是将整数转换为字符串,然后使用StringBuilder 类来反转字符串。然后,您可以使用 Integer.parseInt() 方法将其转换回 Integer 并检查它们是否相等,或者使用原始 String 和反向版本使用 .equals() 调用。
  • 除 2 和 5 之外,每个质数都必须以 1、3、7 或 9 结尾。您可以通过查看最高有效位来消除很多多位数字。

标签: java for-loop if-statement primes palindrome


【解决方案1】:

所以好像有三种方法

(1) 将数字转换为字符串,然后让库调用反转它。 (慢)

(2) 对数字和 mod 10 数学使用一些循环来生成结果,然后检查与输入是否相等。 (快)

(3) 如果你有一个小于 N 的所有素数的列表,请编写一个回文生成器 使所有回文数都小于 N,然后比较这些列表。 (据称非常快)

(注意:使用集合而不是列表,尤其是使用快速查找来告诉您集合中是否存在值的集合)


对于数学版本,这很容易(假设以 10 为底)

取输入数字 i 并复制 n。 创建一个输出编号o。

[循环]

  • 令 x = n mod 10
  • 将 n 除以 10。
  • 将o乘以十
  • 将 x 添加到 o
  • 重复直到 n 为零。

[结束循环]

如果 i == o 那么它是回文

【讨论】:

    【解决方案2】:

    检查回文并不困难。这比确定数字是否为素数要容易。您可以使用以下逻辑来检查质数是否为回文。

     boolean isPalindrome(int num) {
        int reversed = 0, remainder, original;
        original = num;
        while (num != 0) {
            remainder = num % 10;
            reversed = reversed * 10 + remainder;
            num /= 10;
        }
        return original == reversed;
    }
    

    由于您只想使用一种方法,因此可以将这个逻辑放在您的 isPalin 方法中,而不是返回 true。如果数字是素数,您可以进一步检查它是否是回文。

    static boolean isPalin(int primenumcheck) {
        int leftover;
        for (int i = 2; i <= primenumcheck / 2; i++) {
            leftover = primenumcheck % i;
            //if remainder is 0 than numberToCheckber is not prime and break 
       loop. Elese continue loop
            if (leftover == 0) {
                return false;
            }
        }
        // logic to check Palindromic prime
        int reversed = 0, remainder, original;
        original = primenumcheck;
        while (primenumcheck != 0) {
            remainder = primenumcheck % 10;
            reversed = reversed * 10 + remainder;
            primenumcheck /= 10;
        }
        return original == reversed;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 2021-12-13
      • 2015-01-13
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多