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