FileDocCategorySizeDatePackage
PalindromeBig.javaAPI DocExample2445Sun Feb 08 21:33:58 GMT 2004None

PalindromeBig

public class PalindromeBig extends Object
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).

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 $.

Fields Summary
public static boolean
verbose
protected static final int
MAX_DIGITS
A ridiculously large number
Constructors Summary
Methods Summary
public static java.math.BigIntegerfindPalindrome(java.math.BigInteger num)
find a palindromic number given a starting point, by calling ourself until we get a number that is palindromic.

		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)));
	
public static booleanisPalindrome(java.math.BigInteger num)
Check if a number is palindromic.


	       
	     
		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;
	
public static voidmain(java.lang.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);
			} 
	
static java.math.BigIntegerreverseNumber(java.math.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));