http://projecteuler.net/problem=1
如果我们列出10以下的所有自然数,它们是3或3的倍数 5,我们得到3,5,6和9.这些倍数的总和是23.找到 所有3或5的倍数的总和低于1000。
如果我将“int maxNum”更改为10或任何其他小数字(如20),我会得到正确答案。
但不知何故,当我用一个像1000这样的大数字时,它会给我一个我不希望来的数字,我不知道为什么,请帮助。
是否这样做是因为它已达到int的最大值?
class Program
{
static void Main(string[] args)
{
//TASK: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
//Find the sum of all the multiples of 3 or 5 below 1000.
int multiplierA = 3;
int multiplierB = 5;
int maxNum = 1000;
int i = 1;
int deelEen = MultiplyFactory(multiplierA, i, maxNum);
int deelTwee = MultiplyFactory(multiplierB, i, maxNum);
int result = deelEen + deelTwee;
Console.WriteLine(result);
Console.Read();
}
static int MultiplyFactory(int multiplier, int i, int maxNum)
{
List<int> savedNumbers = new List<int>();
while(multiplier*i < maxNum)
{
savedNumbers.Add(multiplier*i);
i++;
}
int answer = 0;
foreach(int getal in savedNumbers)
{
Console.WriteLine(getal);
answer = answer + getal;
}
savedNumbers.Clear();
return answer;
}
}
答案 0 :(得分:1)
我认为问题在于你需要找到3 OR 5的所有倍数之和。而你的程序正在做的是找到所有乘数的总和3 +所有乘数之和为5。 您可以返回int数组,然后从数组中求和不同的数字。
您还可以使用Linq从列表中获取不同的值
class Program
{
static void Main(string[] args)
{
//TASK: If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
//Find the sum of all the multiples of 3 or 5 below 1000.
int multiplierA = 3;
int multiplierB = 5;
int maxNum = 1000;
int i = 1;
int result = 0;
List<int> deelEen = MultiplyFactory(multiplierA, i, maxNum);
List<int> deelTwee = MultiplyFactory(multiplierB, i, maxNum);
foreach (int val in deelEen)
result += val;
foreach (int val in deelTwee)
if (!deelEen.Contains(val)) result += val;
Console.WriteLine(result);
Console.Read();
}
static List<int> MultiplyFactory(int multiplier, int i, int maxNum)
{
List<int> savedNumbers = new List<int>();
while (multiplier * i < maxNum)
{
savedNumbers.Add(multiplier * i);
i++;
}
return savedNumbers;
}
}
答案 1 :(得分:0)
问题在于你算了两次数字。 例如,您首先将15总和为3,然后将其添加为可分为5。
因此,对于1到20之间的数字,你有
deelEen = 3 + 6 + 9 + 12 + 15 + 18
deelTwee = 5 + 10 + 15
和
result = 3 + 5 + 6 + 9 + 10 + 12 + 15 + 15 + 18
正确答案是
result = 3 + 5 + 6 + 9 + 10 + 12 + 15 + 18