13个相邻数字的最大乘积

时间:2018-03-11 14:45:04

标签: c#

List<int> arr = new List<int>();
long max = 0;
long mul = 1;
string abc = @"73167176531330624919225119674426574742355349194934
               85861560789112949495459501737958331952853208805511
               96983520312774506326239578318016984801869478851843
               12540698747158523863050715693290963295227443043557
               66896648950445244523161731856403098711121722383113
               62229893423380308135336276614282806444486645238749
               30358907296290491560440772390713810515859307960866
               70172427121883998797908792274921901699720888093776
               65727333001053367881220235421809751254540594752243
               52584907711670556013604839586446706324415722155397
               53697817977846174064955149290862569321978468622482
               83972241375657056057490261407972968652414535100474
               82166370484403199890008895243450658541227588666881
               16427171479924442928230863465674813919123162824586
               17866458359124566529476545682848912883142607690042
               24219022671055626321111109370544217506941658960408
               07198403850962455444362981230987879927244284909188
               84580156166097919133875499200524063689912560717606
               05886116467109405077541002256983155200055935729725
               71636269561882670428252483600823257530420752963450";

foreach (char a in abc)
{
    if(arr.Count == 13)
    {
        arr.RemoveAt(0);
    }
    int value = (int)Char.GetNumericValue(a);
    arr.Add(value);
    if(arr.Count == 13)
    {
        foreach(int b in arr)
        {
            mul = mul * b;
            if (mul > max)
            {
                max = mul;
            }
        }
        mul = 1;
    }
} 
Console.WriteLine(max);

我得到了5377010688,这是一个错误的答案,当我在项目Euler中尝试相同的逻辑时,它工作正常,请帮助我。

不要说答案只是纠正了我在哪里做错了或代码没有运行的地方。

2 个答案:

答案 0 :(得分:3)

字符串常量,如上所述,包含空格和\r\n,例如在最后一个&#39; 4&#39;之间第一行和第一行&#39; 8&#39;在第二行。空白Char.GetNumericValue()返回-1。 具有最高产品的字符序列可以跨越字符串中的相邻行,因此中间存在空白,这些空白计为-1,这会禁用代码来查找它们。

像这样写下你的常数:

string abc = @"73167176531330624919225119674426574742355349194934" + "85861560789112949495459501737958331952853208805511" + "96983520312774506326239578318016984801869478851843" +等。

结果是23514624000,我希望这是正确的。

答案 1 :(得分:2)

  

不要说答案只是纠正我在哪里做错了或在哪里   代码没有按原样运行

您已将所有characters纳入计算中,但您不应该这样做。输入string还包含例如每行末尾的回车'\n'

您的实际字符串如下所示:

string abc = @"73167176531330624919225119674426574742355349194934\r\n
               85861560789112949495459501737958331952853208805511\r\n
...

如何解决这个问题?您应该忽略这些字符,一种可能的解决方案是检查每个char是否为数字:

if(!char.IsDigit(a))
{
    continue;
}