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    }