Compute the Palindrome of a number by adding the number composed of : BigInteger « Data Type « Java






Compute the Palindrome of a number by adding the number composed of

   
import java.math.BigInteger;

/** Compute the Palindrome of a number by adding the number composed of
 * its digits in reverse order, until a Palindrome occurs.
 * e.g., 42->66 (42+24); 1951->5995 (1951+1591=3542; 3542+2453=5995).
 * <P>TODO: Do we need to handle negative numbers?
 * @author Ian Darwin, http://www.darwinsys.com/
 * @version $Id: PalindromeBig.java,v 1.3 2004/02/09 03:33:57 ian Exp $.
 */
public class PalindromeBig {

  public static boolean verbose = true;

  public static void main(String[] argv) {
    for (int i=0; i<argv.length; i++)
      try {
        BigInteger l = new BigInteger(argv[i]);
        if (l.compareTo(BigInteger.ZERO) < 0) {
          System.err.println(argv[i] + " -> TOO SMALL");
          continue;
        }
        System.out.println(argv[i] + "->" + findPalindrome(l));
      } catch (NumberFormatException e) {
        System.err.println(argv[i] + "-> INVALID");
      } catch (IllegalStateException e) {
        System.err.println(argv[i] + "-> " + e);
      } 
  }

  /** find a palindromic number given a starting point, by
   * calling ourself until we get a number that is palindromic.
   */
  public static BigInteger findPalindrome(BigInteger num) {
    if (num.compareTo(BigInteger.ZERO) < 0)
      throw new IllegalStateException("negative");
    if (isPalindrome(num))
      return num;
    if (verbose)
      System.out.println("Trying " + num);
    return findPalindrome(num.add(reverseNumber(num)));
  }

  /** A ridiculously large number  */
  protected static final int MAX_DIGITS = 255;

  /** Check if a number is palindromic. */
  public static boolean isPalindrome(BigInteger num) {
    String digits = num.toString();
    int numDigits = digits.length();
    if (numDigits >= MAX_DIGITS) {
      throw new IllegalStateException("too big");
    }
    // Consider any single digit to be as palindromic as can be
    if (numDigits == 1)
      return true;
    for (int i=0; i<numDigits/2; i++) {
      // System.out.println(
      //   digits.charAt(i) + " ? " + digits.charAt(numDigits - i - 1));
      if (digits.charAt(i) != digits.charAt(numDigits - i - 1))
        return false;
    }
    return true;
  }

  static BigInteger reverseNumber(BigInteger num) {
    String digits = num.toString();
      int numDigits = digits.length();
    char[] sb = new char[numDigits];
    for (int i=0; i<digits.length(); i++) {
      sb[i] = digits.charAt(numDigits - i - 1);
    }
    // Debug.println("rev",
    //   "reverseNumber(" + digits + ") -> " + "\"" + sb + "\"");
    return new BigInteger(new String(sb));
  }
}



           
         
    
    
  








Related examples in the same category

1.BigInteger.isProbablePrime
2.Operating with Big Integer Values
3.Create BigInteger via string
4.Create BigInteger via long type variable
5.Multiply one BigInteger to another BigInteger
6.Subtract one BigInteger from another BigInteger
7.Divide one BigInteger from another BigInteger
8.Negate a BigInteger
9.Calculate the power on a BigInteger
10.Create BigInteger from byte array
11.Performing Bitwise Operations with BigInteger
12.Get the value of a bit
13.Set a bit for BigInteger
14.Clear a bit in a BigInteger
15.Flip a bit in a BigInteger
16.Shift the bits in a BigInteger
17.Shift right in a BigInteger
18.xor a BigInteger
19.and operation on BigInteger
20.not operation for BigInteger
21.or operation for BigInteger
22.antNot operation on BigInteger
23.Retrieve the current bits in a byte array in twos-complement form.
24.Parsing and Formatting a Big Integer into Binary
25.Parsing and Formatting a Big Integer into octal
26.Parsing and Formatting a Big Integer into decimal
27.Parse and format to hexadecimal
28.Parse and format to arbitrary radix <= Character.MAX_RADIX
29.Create a BigInteger using the byte array
30.Parsing and Formatting a Byte Array into Binary
31.Parsing and Formatting a Byte Array into Octal
32.Parsing and Formatting a Byte Array into decimal
33.Parsing and Formatting a Byte Array into Hexadecimal
34.Parse binary string
35.Get byte array from BigInteger
36.Parse octal string to create BigInteger
37.Parse decimal string to create BigInteger
38.Parse hexadecimal string to create BigInteger
39.Convert BigInteger into another radix number
40.Do math operation for BigInteger
41.Operate with big integer values in code
42.Demonstration of high-precision integer arithmetic with the BigInteger classDemonstration of high-precision integer arithmetic with the BigInteger class
43.This program uses big numbers to compute the odds of winning the grand prize in a lottery.
44.BigInteger bitwise Gcd
45.BigInteger lowest numBits
46.BigInteger highest numBits
47.Is one BigInteger Divisible by another BigInteger
48.Is a BigInteger Even