2016-05-24 15 views
-1

私はANSI Cで初めて作業しており、N個の用語にシリーズをまとめる必要があります。最小量のシステムリソースを使用してANSI Cで「無限」シリーズの符号を交互に作成するにはどうすればよいですか?

私の背景はCSではなく物理学であるので、本能的に古い(-1)^ Nトリックを使用すると考えましたが、すぐに1)動作しなかったこと、2)ANSI Cには指数演算子を組み込みました。

私は累乗が遅いことを認識して以来、このために交互のシリーズを作成する最良の方法は何ですか?私の2番目の考えは、Nのパリティをチェックしていたのですが、if文を使って、1か-1のいずれかを使ってその掛け算を行いましたが、コンピュータ上のパリティをチェックする良い方法はわかりません。 -1をべき乗するよりも遅くなります。

これを達成するためのより良い方法は、CPUに大きな負担をかけることはありませんか?

+1

あなたが各ループで(-1)を掛け、または使用することができます(N%2 1:?を - 1)は、Nモジュロ2の結果に応じて1または-1を返す式であるが、同じであるが「ビットおよび」演算子(最後のビットの値Nの)。 (3、N) – reuns

+0

https://en.wikipedia.org/wiki/Operators_in_C_and_C++ – reuns

+0

@ user1952009という用語は完全に各反復の可能性があるので、そのように乗算することはできません。 –

答えて

3

はちょうど別の変数として記号を維持し、あなたがそれぞれの用語プロセスとしてそれを否定:

int sign = 1; 
for (int i = 0; i < N; i++) 
{ 
    printf("%2d\n", sign); 
    sign = -sign; 
} 
+1

これはIMHOのベストソリューションです。 –

関連する問題