Palindrome数字产品的两个3位数字 - 项目欧拉解决方案4 - 暴力无法工作

时间:2015-10-23 11:40:10

标签: c# numbers palindrome

我正在使用此代码来解决问题。项目欧拉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。我不想知道更好的解决方案。我只是想知道为什么我的代码无效。

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

1 个答案:

答案 0 :(得分:2)

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

变量XY的迭代次数均为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);