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中尝试相同的逻辑时,它工作正常,请帮助我。
不要说答案只是纠正了我在哪里做错了或代码没有运行的地方。
答案 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;
}