回文数产品的两个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
。我不想知道更好的解决办法。我只是想知道为什么我的代码不工作。
任何帮助都将非常感激。
您的结果将存储从循环中获得的最后一个回文数,但不是最大的回文数。
变量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);