我正在尝试使用以下程序解决Project Euler problem number 6:
double counter = 1;
double sumsquare = 0;
double squaresum = 0;
while (counter <= 100)
{
sumsquare += Math.Pow(counter, 2);
squaresum += counter;
counter++;
}
Math.Pow(squaresum, 2);
Console.WriteLine("the sum is {0} ,the square is :{1}", squaresum.ToString(), sumsquare.ToString());
double diff = sumsquare - squaresum;
Console.WriteLine(diff.ToString());
Console.ReadLine();
然而,答案是错误的。谁能告诉我我的代码有什么问题?
答案 0 :(得分:4)
你有一个错误,你正在计算一个权力,然后丢弃它。
更一般地说,在解决涉及整数的PE问题时应避免加倍。双打仅精确到小数点后十五位;之后,他们完成了。
更好的类型是 long ,它可以表示最多9,223,372,036,854,775,807或十进制的整数,它们可以表示高达79,228,162,514,264,337,593,543,950,335或BigInteger的整数,它们可以表示任意大的值。
请注意,使用较大和较大的类型时,代码通常会变慢。
更一般地说,现在是学习如何使用调试器的好时机。找出你可以手动计算的一个非常小的案例,你的程序输出应该是什么。然后逐行逐步执行您的程序,看看它出错了。这比调用互联网更有效地调试问题。
答案 1 :(得分:3)
您似乎认为Math.Pow(squaresum, 2);
修改了squaresum
。事实并非如此:返回 squaresum
的正方形,如果您想要修改变量,则应将其分配给squaresum
。
squaresum = Math.Pow(squaresum, 2);
此处使用double
类型的想法并不是很好,但看起来你不会在这里失去足够的精度来得到错误的结果。