反向时不变的数字称为回文数。换句话说,反转数字时不影响该数字称为回文数。例如,回文数为121、343、555、606、999、1001、1331。在本节中,我们将创建一个Java程序来检查数字是否为回文数。


查找回文数的算法

  • 获取编号,将要检查回文。
  • 通过将数字存储在某个临时变量中来创建该数字的副本。
  • 现在,反转数字。
  • 检查复印件的倒数是否相等。
  • 如果相等,那么我们有回文数。
  • 否则,该数字不是回文。

以下Java程序演示了如何使用while循环来检查给定数字是否是回文数。

迭代法

文件名: PalindromeNumberExample 爪哇

public class PalindromeNumberExample
{             
public static void main(String[] args)
{
               int no = 535; // To be checked for palindorme
               int tempVar = no; // Creating the copy of ‘no’
               int sum = 0;
               while(no > 0)
               {
                               // reversing the number
                               sum = sum * 10;
                               sum = sum + (no % 10);
                               no = no / 10;
               }
               if(tempVar == sum)
                               System.out.print("The number " + tempVar +" is a palindrome number.");
               else
                               System.out.print("The number " + tempVar +" is not a palindrome number.");
}
}

输出:

The number 535 is a palindrome number.

说明:我们使用Java while循环来反转数字。while循环的迭代次数取决于给定数字中存在的位数。在我们的例子中是3。让我们看看程序的工作原理。

第一次迭代: sum = sum * 10。但是,我们将sum的值初始化为0;因此,我们得出sum = 0 * 10 = 0。同样,我们通过将给定数字相除得到的余数相加来更新总和的值(535)。因此,我们得出sum = 0 +(535%10)总和= 0 + 5 = 5。最后,我们将给定数字除以10,然后将商分配给该数字。否= 535/10 = 53。无变量的更新值为53,将在下一次迭代中使用。

第二次迭代在第二次迭代中, sum的值为5。因此,总和= 5 * 10 = 50。同样,我们将余数相加。这次的数字是53。因此,我们得出sum = 50 +(53%10)总和变成50 + 3 = 53。最后,给定数字再次缩小一位,变为5。no = 53/10 = 5

第三次迭代过程相似。的总和为53。因此,总和= 53 * 10 = 530。加完余数后,我们得到535。此外,数字变为no = 5/10 = 0。因为每次我们都检查while循环条件。当条件no> 0返回false时,循环终止。

递归方法

我们还可以使用递归方法检查回文数。

文件名: PalindromeNumberExample1 爪哇

 
public class PalindromeNumberExample1
{
static boolean isPalindrome(int no, int tempVar, int sum)
{
               if(no < 0) return false;
               if(no == 0) return sum == tempVar;
               return isPalindrome(no/10, tempVar, sum * 10 + (no%10));                  
}
public static void main(String[] args)
{
               int a[] = {4, 434, 909, 100, -66, 123, 797};
               for(int i = 0; i < a.length; i++)
                               if(isPalindrome(a[i], a[i], 0))
                                              System.out.println("The number " + a[i] +" is a palindrome number.");
                               else
                                              System.out.println("The number " + a[i] +" is not a palindrome number.");
}
}

输出:

The number 4 is a palindrome number.
The number 434 is a palindrome number.
The number 909 is a palindrome number.
The number 100 is not a palindrome number.
The number -66 is not a palindrome number.
The number 123 is not a palindrome number.
The number 797 is a palindrome number.

说明:同样在递归方法中,我们创建了该数字的副本,然后将其与我们反转的数字进行比较。注意,根据数学定义,负数永远不能是回文数

import java.util.*;   
class PalindromeExample2  
{  
   public static void main(String args[])  
   {  
      String original, reverse = ""; // Objects of String class  
      Scanner in = new Scanner(System.in);   
      System.out.println("Enter a string/number to check if it is a palindrome");  
      original = in.nextLine();   
      int length = original.length();   
      for ( int i = length - 1; i >= 0; i-- )  
         reverse = reverse + original.charAt(i);  
      if (original.equals(reverse))  
         System.out.println("Entered string/number is a palindrome.");  
      else  
         System.out.println("Entered string/number isn't a palindrome.");   
   }  
}