最大的回文

本文关键字:回文 | 更新日期: 2023-09-27 17:56:41

我已经成功地确定了哪两个数字相乘时在 C# 中产生了一个数字回文,但是我需要从低到高对乘积进行排序。有没有办法这样做?

static void LargestPalindrome()
{
    ulong product = 0;
    ulong compare = 0;
    for (uint i = 100; i < 1000; i++) 
    {
        for (uint j = 100; j < 1000; j++)
        {
            product = i * j;
            StringBuilder value = new StringBuilder(product.ToString());
            //Pass string to reverse
            string value_r = Reverse(value.ToString());
            //Check if Numeric Palindrome
            if(value_r.Equals(value.ToString()) && product>compare)
            {      
                Console.WriteLine("{0} x {1} = {2} in reverse {3}", i, j, value, value_r);
            }
        }
    }
}

最大的回文

不要打印出回文,而是将数字放在 List 中。完成循环后,呼叫列表。排序()。

以下就足够了。我只是对回文列表进行了排序,并将它们打印到控制台屏幕上。

static void LargestPalindrome()
{
    ulong product = 0;
    ulong compare = 0;
    List<ulong> results = new List<ulong>();
    for (uint i = 100; i < 1000; i++) 
    {
        for (uint j = 100; j < 1000; j++)
        {
            product = i * j;
            StringBuilder value = new StringBuilder(product.ToString());
            //Pass string to reverse
            string value_r = Reverse(value.ToString());
            //Check if Numeric Palindrome
            if(value_r.Equals(value.ToString()) && product>compare)
            {      
                results.Add(product);
            }
        }
    }
    results.Sort();
    foreach (var palindrome in results)
    {
        Console.WriteLine(palindrome);
    }    
}

您也可以使用 LINQ:

var palindromes = from i in Enumerable.Range(100, 9900)
                  from j in Enumerable.Range(100, 9900)
                  let product = (i * j)
                  where product.ToString() == new string(product.ToString().Reverse().ToArray())
                  orderby product
                  select product;