首页 > 解决方案 > 找到由两个 3 位数字的乘积构成的最大回文 C#

问题描述

我试图用 C# 解决 projecteuler 4th 项目,但我没有收到正确的答案,我得到 90909。有人能发现我的错误吗?

问题是这样的:

回文数的两种读法都是一样的。由两个 2 位数字的乘积构成的最大回文数是 9009 = 91 × 99。

找出由两个 3 位数字的乘积构成的最大回文数。

namespace Largest_palindrome_product{

class Program
{
    static void Main(string[] args)
    {
        string Reverse(string s)
        {
            char[] charArray = s.ToCharArray();
            Array.Reverse(charArray);                
            return new string(charArray);
        }


        int result = 0;
        string rev= "hello";
        string palindrome = "hello";
        string bingo = "hello";
        int j = 1;
        for (int i = 1; i< 1000; i++)
        {
            for (int y = 1; y< 1000; y++)
            {
                result = i * y;
                bingo = result.ToString();
                rev = Reverse(bingo);
                j = int.Parse(bingo);
            }

            if (rev == bingo)
            {
                palindrome = bingo;
            }
        }
        Console.Write(palindrome);
        Console.Read();
    }
}

}

标签: c#

解决方案


我认为造成如此多混乱的原因是使用String它只会使必须来回转换它们的事情变得复杂。

if只要您检查了新数字更大,您的程序就可以正常工作(如果根据约翰的评论移动了)!

这是我的看法:

// stolen from https://www.geeksforgeeks.org/reverse-digits-integer-overflow-handled/
int Reverse(int num)
{
    int rev_num = 0;
    while (num > 0)
    {
        rev_num = rev_num * 10 + num % 10;
        num = num / 10;
    }
    return rev_num;
}


int result = 0;
int palindrome = 0;
int j = 1;
for (int i = 999; i > 0; i--)
{
    for (int y = 999; y > 0; y--)
    {
        result = i * y;
        if (result == Reverse(result))
        {
            if (result > palindrome)
            {
                palindrome = result;
            }
        }  
    }
}
Console.Write(palindrome);
Console.Read(); 

推荐阅读