-1

次のプログラムを使用して、 Project Euler の問題番号 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();

しかし、答えは間違っていました。私のコードの問題は誰か教えてもらえますか?

4

2 に答える 2

4

電力を計算してから破棄しているというエラーがあります。

より一般的には、整数を含むPEの問題を解決するときは、doubleを避ける必要があります。ダブルスは小数点以下15桁までしか正確ではありません。その後、彼らは四捨五入します。

使用するのに適したタイプはlongで、9,223,372,036,854,775,807までの整数を表すことができ、decimalは79,228,162,514,264,337,593,543,950,335までの整数を表すことができ、BigIntegerは任意の大きな値を表すことができます。

ますます大きなタイプを使用すると、通常、コードの速度が低下することに注意してください。

さらに一般的には、デバッガーの使用方法を学ぶ良い機会です。手作業で計算できる非常に小さなケースの場合、プログラムの出力がどうあるべきかを理解します。次に、プログラムを1行ずつステップ実行して、どこで問題が発生するかを確認します。これは、インターネットに問い合わせるよりもはるかに効率的に問題をデバッグする方法です。

于 2013-02-10T15:36:12.323 に答える
3

Math.Pow(squaresum, 2);あなたはそれが変更すると思うようですsquaresum。そうではありません。2乗を返します。変数を変更する場合squaresumは、に割り当てる必要があります。squaresum

squaresum = Math.Pow(squaresum, 2);

また、doubleここで型を使用するという考えはあまり良くありませんが、間違った結果を得るのに十分な精度を失うことはないようです。

于 2013-02-10T15:34:58.647 に答える