📜  Java程序来反转一个数字并检查它是否是回文

📅  最后修改于: 2022-05-13 01:55:30.831000             🧑  作者: Mango

Java程序来反转一个数字并检查它是否是回文

如果给定数字的倒数与给定数的倒数相同,则给定数本质上可以说是回文。数字的长度为 log 10 (n),即对于 BigIntegers 使用字符串操作,如创建反向和检查回文将花费 log 10 (n) 时间。

A. Java int 限制下的数量

例子 :

Input : n = 46355364
Output: Reverse of n = 46355364
    Palindrome = Yes

Input : n = 87476572465
Output: Reverse of n = 56427567478
    Palindrome = No

我们可以通过多种方式反转一个数字,下面是相同的迭代实现。

迭代算法:

Input:  number
1. Initialize reversed_number = 0
2. Loop while num
ber > 0
     a. Multiply reversed_number by 10 and add number  % 10 to reversed_number
               reversed_number  = reversed_number*10 + number %10;
     b. Divide number by 10
3. Return reversed_number

例子:

number = 1234
reversed_number= 0

reversed_number = reversed_number *10 + number%10 = 4
number = number/10 = 123

reversed_number = reversed_number*10 + number%10 = 20 + 6 = 43
number = number/10 = 12

reversed_number = reversed_number*10 + number%10 = 260 + 5 = 432
number = number/10 = 1

reversed_number = reversed_number*10 + number%10 = 265 + 4 = 4321
number = number/10 = 0

下面是上述方法的实现。

Java
// Java program to reverse a number
// and find if it is a palindrome or not
class GFG {
  
    // Iterative function to
    // reverse the digits of number
    static int reversNumber(int n)
    {
        int reversed_n = 0;
        while (n > 0) {
            reversed_n = reversed_n * 10 + n % 10;
            n = n / 10;
        }
        return reversed_n;
    }
  
    // Main function
    public static void main(String[] args)
    {
        int n = 123464321;
        int reverseN = reversNumber(n);
        System.out.println("Reverse of n = " + reverseN);
        
        // Checking if n is same
        // as reverse of n
        if (n == reverseN)
            System.out.println("Palindrome = Yes");
        else
            System.out.println("Palindrome = No");
    }
}


Java
// Java program to reverse a number
// and find if it is a palindrome or not
import java.io.*;
import java.math.BigInteger;
class GFG {
    // Reverse Big Integer
    public static BigInteger reverse(BigInteger n)
    {
        String s = n.toString();
        StringBuilder sb = new StringBuilder(s);
        return new BigInteger(sb.reverse().toString());
    }
    // Main Function
    public static void main(String[] args)
    {
        BigInteger n
            = new BigInteger("12345678999999999987654321");
        BigInteger reverseN = reverse(n);
        System.out.println("Reverse of n = " + reverseN);
  
        // Checking if n is same
        // as reverse of n
        if (n.compareTo(reverseN) == 0)
            System.out.println("Palindrome = Yes");
        else
            System.out.println("Palindrome = No");
    }
}


输出
Reverse of n = 123464321
Palindrome = Yes

时间复杂度: O(log 10 (n)) 其中 n 是输入数字。

B. 大整数:使用 BigInteger 类

例子

Input : n = 12345678999999999987654321
Output: Reverse of n = 12345678999999999987654321
    Palindrome = Yes

方法

  1. 在 BigInteger 变量中输入。
  2. 使用 reverse 方法反转给定的 BigInteger。
  3. 使用 compareTo() 方法比较两个 BigInteger。

下面是上述方法的实现。

Java

// Java program to reverse a number
// and find if it is a palindrome or not
import java.io.*;
import java.math.BigInteger;
class GFG {
    // Reverse Big Integer
    public static BigInteger reverse(BigInteger n)
    {
        String s = n.toString();
        StringBuilder sb = new StringBuilder(s);
        return new BigInteger(sb.reverse().toString());
    }
    // Main Function
    public static void main(String[] args)
    {
        BigInteger n
            = new BigInteger("12345678999999999987654321");
        BigInteger reverseN = reverse(n);
        System.out.println("Reverse of n = " + reverseN);
  
        // Checking if n is same
        // as reverse of n
        if (n.compareTo(reverseN) == 0)
            System.out.println("Palindrome = Yes");
        else
            System.out.println("Palindrome = No");
    }
}
输出
Reverse of n = 12345678999999999987654321
Palindrome = Yes

时间复杂度: O(log 10 (n)) 其中 n 是输入数字。