ProjectEuler Q1编程意外结果

时间:2014-02-09 08:46:12

标签: c#

我正在解决第一个问题,我的原始程序看起来像这样

int multiplesof=1000,count=0, multiple1 = 3, multiple2 = 5,val1,val2,sum=0;

while (count < multiplesof)
{
    if (count % multiple1 == 0)
        sum = sum += count;
    if (count % multiple2 == 0)
        sum = sum += count;
    count++;
}
Console.Out.WriteLine(sum + " is the sum of all multiples");
Console.In.ReadLine();

它给了我266333的解决方案。事实证明这是错误的,我看着谷歌。我已经通过以下循环得到了正确的值233168。但对我来说,他们看起来完全一样。有谁能解释为什么他们会提出不同的答案?

while (count < multiplesof)
{
    if (count % multiple1 == 0 || count % multiple2 == 0)
        sum = sum += count;
    count++;               
}

2 个答案:

答案 0 :(得分:5)

因为你加了两次,如果它是3和5的倍数,就像它是15时那样。

另一种解决方案,如果您打算尝试自己解决问题,还可以使用扰流板:

  

int result = 3 * (999 / 3 * (999 / 3 + 1) / 2) + 5 * (999 / 5 * (999 / 5 + 1) / 2) - 15 * (999 / 15 * (999 / 15 + 1) / 2);

答案 1 :(得分:0)

考虑可被3和5整除的数字,例如15.您的第一次尝试将它们计算两次。