バイナリでの1の数:5安全オファーシリーズを証明

私は元のコード、アンチコードおよび補体下コンセプトについてお話しましょう。正または負の数の最初のコンピュータで0の正の数、負の数を示します。3ヤードのすべての条件が同じ数。負の数の場合、この3ヤードは、その符号には影響しません。すべてのビットへのアンチコード、プラス1に反転補完。

ここで読み出さトピック入力に番号を考えているN、サイクル数をkによって決定され、k番目のように見つけること> n = 2の場合、決意は、それらが等しい場合に等しくない場合、出力1に等しく、かつnを算出します2 K-1との差をパワーSIGと呼ばれ、出力は1つの+ F(SIG)として得られ、以下のように、コードは次のとおりです。

1の#include <iostreamの>
 2の#include <ベクトル>
 3の#include <math.h>の
 4  使って 名前空間STDを、
5  クラスソリューション{
 6  公共7      INT   NumberOf1(INT N){
 8          のint i = 0 ;
9          一方(POW(2、i)は< N)
 10          {
 11              I ++ 12          }
 13          であれば(POW(2、i)は== N)
 14         {
 15              リターン 1 16          }
 17          {
 18              INT SIG = N - POW(2、I - 1 )。
19              int型の再;
20              再= 1 + NumberOf1(SIG)。
21の             戻り再;
22          }
 23  
24      }
 25  }。
26  のint main()の
 27  {
 28      ソリューションので、
29      INT再= so.NumberOf1(20 )。
30     coutの<< <<再てendlを。
31      リターン 0 ;
32 }

私自身のテスト結果が正しいか、結果がemmmmmmm、その残業を与えられている......

次に、これは答えの変更に基づいて良い感じている単純な答えを見て:

1  クラスソリューション{
 2  公共3      INT   NumberOf1(int型n)を{
 4          INT I = 1、=カウント0 5          しばらく(N)
 6          {
 7              場合(I&N)
 8              {
 9                  カウント++ 10              }
 11              N = N >> 1 12          }
 13          リターン数えます。
14  
15      }
 16 }。

しかし、ガチョウ、または時間外......

私は少し良く変更しましたが、私は、問題を見つけられませんでした....... この質問は関係なく、正と負の、あまり考えていない、という事実にあります。オンラインプログラミングスパイシーなチキン牛の顧客ネットワークについてTucao。私は実際に渡されたVC ++のコードでは動作しませんデバッグしています。

1  クラスソリューション{
 2  公共3      INT NumberOf1(int型N)
 4      {
 5          int型のカウント= 0 ;
6          のintフラグ= 1 7          一方(フラグ)
 8          {
 9              あれば(N&フラグ)
 10              {
 11                  カウント++ 12              }
 13              フラグ=フラグ<< 1 14          }
 15          リターンカウント;
16      }
 17 }。

ちょうどnに、本当に超シンプルなアイデアで、n-1と算術演算を行う答えを読んで、あなたは最後の1サイクルの終わりを解消するまで、これはそれでなければならないので、上の図の右端を排除し、することができます質問の最適解:

1つの     公共2          INT NumberOf1(INT N)
 3          {
 4              int型のカウント= 0 ;
5              しばらく(N)
 6              {
 7                  カウント++ 8                  N = N・(N - 1 )。
9              }
 10              リターン数えます。
11          }

STLは、直接関数をするために使用することができている、私はそれを覚えている......

1  クラスソリューション{
 2      公共3          INT NumberOf1(INT N)
 4          {
 5              ビット集合< 32 > ビット(N)。
6              戻りbit.count()。
7  
8          }

 

おすすめ

転載: www.cnblogs.com/neverland0718/p/10972782.html
おすすめ