我正在使用此代码来解决问题。项目欧拉4。问题是:
回文数字两种方式相同。由两个2位数字的乘积制成的最大回文是9009 = 91×99 找到由两个3位数字的乘积制成的最大回文。
我试图解决这个问题。我的代码返回一个回文数和一个相当大的数字。但这是不正确的。我也在MathBlog.dk找到了正确的解决方案。但是我的代码有什么问题? -
<defs>
<g id="infantry_svg" >
<circle cx="30" cy="30" r="40" stroke="red" stroke-width="5"/>
<path>path stuff</path>
</defs>
var g = s.g().use( Snap.select('#infantry_svg') );
var g1 = s.g( g ).attr({ fill: 'yellow' });
var g2 = g.clone().attr({ fill: 'blue', transform: 't200,0' })
var g2 = g.clone().attr({ fill: 'green', transform: 't100,0' })
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
。我不想知道更好的解决方案。我只是想知道为什么我的代码无效。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:2)
您的结果是存储从循环中获得的最后一个回文数,但不是最大数。
变量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);