public static void Test31()
    {
        PalindromCalculator cal = new PalindromCalculator();

        cal.Start = new Number("89");
        cal.Limit = 1000;
        if (cal.CalcPalindrom())
        {
            Console.WriteLine("Start {0} --> {1} steps:  Palindrom {2}",
                              cal.Start, cal.Steps, cal.Palindrom);
        }

        cal.Start = new Number("196");
        cal.Limit = 1000;
        if (!cal.CalcPalindrom())
        {
            Console.WriteLine("Number {0} seems not to generate a palindrom (tried {1} steps) !",
                              cal.Start, cal.Limit);
        }

        cal.Start = new Number("789");
        cal.Limit = 1000;
        if (cal.CalcPalindrom())
        {
            Console.WriteLine("Start {0} --> {1} steps:  Palindrom {2}",
                              cal.Start, cal.Steps, cal.Palindrom);
        }

        cal.Start = new Number("53978");
        if (cal.CalcPalindrom())
        {
            Console.WriteLine("Start {0} --> {1} steps:  Palindrom {2}",
                              cal.Start, cal.Steps, cal.Palindrom);
        }

        cal.Start = new Number("52007615407");
        if (cal.CalcPalindrom())
        {
            Console.WriteLine("Start {0} --> {1} steps:  Palindrom {2}",
                              cal.Start, cal.Steps, cal.Palindrom);
        }

        // may run very very long ......
        cal.Start = new Number("456789900345345");
        cal.Limit = 50000;
        if (!cal.CalcPalindrom())
        {
            Console.WriteLine("Start {0}: No result after {1} steps!",
                              cal.Start, cal.Limit);
        }
        else
        {
            Console.WriteLine("Start {0} --> {1} steps:  Palindrom {2}",
                              cal.Start, cal.Steps, cal.Palindrom);
        }
    }
    public static void Test40()
    {
        PalindromCalculator cal = new PalindromCalculator();

        cal.Limit = 1000;

        bool verbose = false;

        int foundPalindroms = 0;
        int maxSteps        = -1;

        for (int i = 1; i <= 10000; i++)
        {
            String s = i.ToString();
            cal.Start = new Number(s);
            bool b = cal.CalcPalindrom();
            if (b)
            {
                foundPalindroms++;

                if (cal.Steps > maxSteps)
                {
                    maxSteps = cal.Steps;
                }

                if (verbose)
                {
                    Console.WriteLine("Found Palindrom: Start = {0} -- Palindrom = {1} -- Steps: {2}",
                                      cal.Start, cal.Palindrom, cal.Steps);
                }
                else
                {
                    if (i % 1000 == 0)
                    {
                        Console.Write(".");
                    }
                }
            }
            else
            {
                if (verbose)
                {
                    Console.WriteLine("No Palindrom: Start = {0}", cal.Start);
                }
            }
        }

        Console.WriteLine();
        Console.WriteLine("Total Palindroms: {0}      Max Steps: {1}",
                          foundPalindroms, maxSteps);
    }
    public static void MostDelayedPalindromicNumberRecord()
    {
        PalindromCalculator cal = new PalindromCalculator();

        cal.Limit = 300;
        cal.Start = new Number("1186060307891929990");
        if (cal.CalcPalindrom())
        {
            Console.WriteLine("Most Delayed Palindromic Number Record:");
            Console.WriteLine("Start:     {0}", cal.Start);
            Console.WriteLine("Palindrom: {0}", cal.Palindrom, cal.Steps);
            Console.WriteLine("Steps:     {0}", cal.Steps);
        }
    }