2017-11-22 5 views
2

2つの数字が同じパリティ(両方が奇数であるか、または両方が偶数であるか)を調べる2つの解決策が見つかりました。2つの数字が同じパリティを持つかどうかを判断する正しい方法はどれですか?

if ((a+b)%2 == 0) 

if (a%2 == b%2) 

問題は、最初の1しか例80%で100例%と二番目に動作することである(テスト:C++では、彼らはこのように見えます私がウェブサイト上に提出した問題の)と私はなぜ理解していない。私にとっては、両方のコード行がすべての場合にうまく機能するはずです。なぜ、最初のコード行がすべての場合に機能し、2番目の行がなぜ機能しないのか、誰かが私に説明できますか?そして、どの方法(私や他の人によって示されたもの)をお勧めしますか?私はあなたのポスト内のいずれかの方法をお勧めしません

+1

#2が機能しないテストケースを提供できますか? –

+0

私はこの問題に関するテストを見ることができません。そして、2番目の声明がうまくいかない論文には何も見つかりませんでした。 –

+0

'a'と' b'はどんなタイプですか? – 1201ProgramAlarm

答えて

3

、あなたの代わりにこれらのいずれかを使用する必要があります。

if ((a & 1) == (b & 1)) {} // this is clearer 

if (((a^b) & 1) == 0) {} // this is faster 

if (!((a^b) & 1)) {}  // this is as fast as faster 

これらは0でも負の場合、奇数の値に設定されるビットという事実に依存しています。可能であれば、整数除算(およびモジュロ)を避けてください。これは、CPU上で最も遅い命令の1つです。

関連する問題