C# 两个3位数字的回文数乘积-项目Euler解决方案4-蛮力不起作用

C# 两个3位数字的回文数乘积-项目Euler解决方案4-蛮力不起作用,c#,numbers,palindrome,C#,Numbers,Palindrome,我用这个代码来解决这个问题。4关于欧拉项目。问题是: 回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。 查找由两个3位数字的乘积构成的最大回文 我试图解决这个问题。我的代码返回一个回文数字,而且也是一个相当大的数字。但这是不正确的。我还找到了一个正确的解决方案。但是我的代码有什么问题-- 我的代码返回580085,但正确答案是906609。我不想知道更好的解决方案。我只是想知道为什么我的代码不起作用 任何帮助都将不胜感激。提前感谢。您的结果是存储从循环中获得的

我用这个代码来解决这个问题。4关于欧拉项目。问题是:

回文数字的两种读取方式相同。由两个两位数的乘积构成的最大回文是9009=91×99。
查找由两个3位数字的乘积构成的最大回文

我试图解决这个问题。我的代码返回一个回文数字,而且也是一个相当大的数字。但这是不正确的。我还找到了一个正确的解决方案。但是我的代码有什么问题--

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


任何帮助都将不胜感激。提前感谢。

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

变量
X
Y
都从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);
long结果=0;

for(长x=100;x您从不检查新计算的结果是否大于当前结果。这可能是因为您正在用for循环中的较低值覆盖最高值结果。您返回的是找到的最后一个回文,而不是最大的回文。遗憾的是,您不想知道更好的解决方案:-)@Dennis_E这是因为我已经通过谷歌搜索“问题4的欧拉解决方案项目”找到了太多的问题。他们可以在~0-1毫秒内解决问题。如果您有更好的解决方案,我欢迎您告诉我。@Farhanam这很有意义。旧问题的解决方案随处可见。
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;
    }
}
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);