![](/img/trans.png)
[英]I want to find the largest product of 2 3-digit number that is a palindrome, and my algorithm isn't finishing even though it should
[英]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
。 我不想知道更好的解决方案。 我只想知道为什么我的代码不起作用。
任何帮助都感激不尽。 提前致谢。
您的结果是存储从循环中获得的最后一个回文数,而不是最大的回文数。
变量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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.