繁体   English   中英

两个三位数的回文数乘积 - Project Euler Solution 4 - Brute Force 不起作用

[英]Palindrome number product of two 3-digit numbers - Project Euler Solution 4 - Brute Force not working

我正在使用此代码来解决问题。 4 欧拉计划。 问题是:

回文数的读法是一样的。 由两个两位数的乘积构成的最大回文数是 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 我不想知道更好的解决方案。 我只想知道为什么我的代码不起作用。

任何帮助都感激不尽。 提前致谢。

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

变量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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM