2015-10-23 24 views
2

我正在使用此代碼來解決問題。 4在歐拉項目。問題是:兩個3位數字的迴文數產品 - 項目歐拉解決方案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。我不想知道更好的解決方案。我只想知道爲什麼我的代碼無法正常工作。

任何幫助將不勝感激。提前致謝。

+1

您從不檢查新計算的結果是否大於當前結果。這可能是因爲你在for循環中用最低值覆蓋了最高值的結果。 – rob

+2

你正在返回找到的**最後一個**迴文,而不是**最大**。 –

+0

@rob和Dennis_E我怎麼可能錯過了?謝謝你的幫助。 –

回答

2

您的結果是存儲從循環中獲得的最後一個迴文編號,但不是最大的迴文編號。

兩個變量X和從100 Y迭代至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);