回文数产品的两个3位欧拉项目解决方案4 -蛮力不工作

本文关键字:解决方案 项目 工作 3位 两个 回文 | 更新日期: 2023-09-27 18:19:00

我使用这个代码来解决问题。4在欧拉项目。问题如下:

回文数的两种读法相同。由两个2位数的乘积组成的最大回文是9009 = 91 × 99。
求两个3位数乘积的最大回文

我已经尽力解决这个问题了。我的代码返回一个回文数,而且是一个相当大的数字。但这是不正确的。我还在MathBlog.dk上找到了一个正确的解决方案。但是我的代码出了什么问题?——

long result = 0;
for (long x = 100; x <= 999; x++)
{
    for (long y = 100; y <= 999; y++)
    {
        long num = x * y;
        if (num.ToString() == StringFunctions.ReverseString(num.ToString()))
        {
                result = num;
        }
    }
}
Console.WriteLine("Result : {0}", result);

StringFunctions.RevereString函数如下:

public static class StringFunctions
{
    public static string ReverseString(string s)
    {
        string result = "";
        for (int i = s.Length - 1; i >= 0; i--)
        {
            result += s.Substring(i, 1);
        }
        return result;
    }
}

我的代码返回580085,但正确答案是906609。我不想知道更好的解决办法。我只是想知道为什么我的代码不工作。

任何帮助都将非常感激。

回文数产品的两个3位欧拉项目解决方案4 -蛮力不工作

您的结果将存储从循环中获得的最后一个回文数,但不是最大的回文数。

变量XY都从100迭代到999

假设所有得到的数字都是回文,x = 500, y = 500。它将在x = 990和y = 100之前执行。但在前一种情况下,回文较大,但代码存储较小的回文。使用if条件获取最大的回文:

long result = 0;
for (long x = 100; x <= 999; x++)
{
    for (long y = 100; y <= 999; y++)
    {
        long num = x * y;
        if (num.ToString() == StringFunctions.ReverseString(num.ToString()))
        {
            if(result < num)
            {
            result = num;
            }
        }
    }
}
Console.WriteLine("Result : {0}", result);