001 package de.hska.java.aufgaben.kontrollstrukturen;
002
003 /**
004 * <p>Berechnet <em>Quersummen-Palindrom-Zahlen<em>.
005 * Eine natürliche Zahl ist eine Quersummen-Palindrom-Zahl,
006 * wenn sie ein Palindrom ist und die Quersumme selbst wieder
007 * eine Quersummen-Palindrom-Zahl.
008 * </p>
009 *
010 * <p>Zum Beispiel ist 123858321 eine solche Zahl.
011 * Quersumme ist 33, ein Palindrom. Quersumme von 33 ist 6 auch wieder
012 * ein Palindrom.<p>
013 *
014 * <p>Es gibt unendlich viele solcher Zahlen, z.B.
015 * 202, 2002, 20002, ..., 2000000000000000000000000002, usw.</p>
016 *
017 * <p>
018 * <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/kontrollanweisungen.html#lychrel_zahl">Zurück zum Aufgabentext</a>
019 * </p>
020 *
021 * @author Christian Pape
022 *
023 */
024 public class QuersummenPalindromZahl {
025
026 /**
027 * @param args
028 */
029 public static void main(String[] args) {
030 for (long zahl = 1L ; zahl <= Long.MAX_VALUE; zahl++) {
031 if ( isQuersummenPalindromZahl(zahl)) {
032 System.out.println(zahl);
033 }
034 }
035 }
036
037 public static boolean isQuersummenPalindromZahl(long zahl) {
038
039 while ( zahl > 9 && LychrelZahl.isPalindrom(zahl)) {
040 zahl = getQuersumme(zahl);
041 }
042
043 return 0 < zahl && zahl < 10;
044 }
045
046
047 private static long getQuersumme(long zahl) {
048 long quersumme = 0;
049
050 while (zahl > 0) {
051 quersumme += zahl % 10;
052 zahl /= 10;
053 }
054 return quersumme;
055 }
056 }