C# 投影Euler 1,无明显原因获得更高的结果

C# 投影Euler 1,无明显原因获得更高的结果,c#,C#,我对Project Euler网站上的第一个编码挑战有问题。这就是你必须做的: 如果我们列出10以下的所有自然数,它们是3的倍数 或者5,我们得到3,5,6和9。这些倍数之和是23 求1000以下所有3或5的倍数之和 这是我的代码c: total = 0; for (int i = 0; i <= (999 - (999 % 3)) / 3; i++) { total += 3 * i; } for (int i = 0; i <= (999 - (999 % 5)) /

我对Project Euler网站上的第一个编码挑战有问题。这就是你必须做的:

如果我们列出10以下的所有自然数,它们是3的倍数 或者5,我们得到3,5,6和9。这些倍数之和是23

求1000以下所有3或5的倍数之和

这是我的代码c:

total = 0;

for (int i = 0; i <= (999 - (999 % 3)) / 3; i++)
{
    total += 3 * i;
}

for (int i = 0; i <= (999 - (999 % 5)) / 5; i++)
{
    total += 5 * i;
}

当我返回total时,它给了我'266333',而它应该是'233168'。我已经盯着它看了大约一个小时,我不知道我的代码哪里出错了。对不起,如果这是一个愚蠢的问题,但谷歌没有帮助我,我觉得自己真的很愚蠢

您可以在单for循环中执行以下操作:

int total = 0;

            for (int i = 1; i < 1000; i++)
            {
                if (i % 3 == 0 || i % 5 == 0)
                {
                    total += i;
                }
            }

它更大是因为像15这样的数字被加了两次。哦,我的天啊,当然。谢谢你你找到了一个解决方案真是太好了,但是现在退一步问问你自己,如果不寻求帮助,我怎么能找到那个解决方案呢?一个很好的技巧是使用一个较小的示例;相反,假设你试图将3或5的倍数相加到20以下;你可以在不到一分钟内手工计算出正确的答案,而你的算法会得到错误的答案。到15岁的时候就错了,你会马上知道问题出在哪里。许多项目Euler问题都适用于此技术;他们中的许多人只是因为这个原因给了你问题的小版本。只是想一想——如果你正在进行这些练习,这将是一个很棒的机会来练习单元测试。您可以编写将maxNumber作为参数的方法。然后编写一个单元测试,断言如果maxNumber是20,那么结果是98。写一个断言maxNumber 999的正确答案是233168。通过这种方式,您将同时学习两件事——如何解决问题以及如何通过单元测试验证代码。请注意,用户并不是在要求完整的解决方案。您需要回答问题,然后才提供建议。