LeetCode :. 08.05再帰乗算フェイス質問

インタビューの質問08.05。再帰乗算

トピックス要件:

再帰乗算。再帰関数を書く、演算子*は、2つの正の整数の乗算を達成するために、使用されていません。あなたはプラス、マイナス、変位が、平均数を使用することができます。

 

問題解決のアイデア:

考え方1:Nの複数に乗算の直接添加、直接暴力を比較します。

小さな数を決定することは、データの多数加え、Nの合計添加されます。

 

2つのアイデア:

1ビット算術、バイナリビットを使用して、2 ^二つの隣接するビット間の差。

2つの最大と最小に2同数。

最下位ビットを決定することにより3. 1、シフト動作であり、各シフトが加算されます。

例子:A = 9、B = 7; A、X B = 9×(2 ^ 2 + 2 ^ 1 + 2 ^ 0)= 9 << 2 + 9 << 1 + 9。

1  クラスソリューション{
 2  公共3      INT乗算(INT A、INT B) 
 4      {
 5          のint NUM = 0 6          リターン(A> B)?MULT(B、A、NUM):MULT(A、B、NUM)。
7      }
 8  
9      INT MULT(整数 nは、INTデータ、INTNUM)
 10      {
 11          // 場合(N == 1)
 12          // {
 13          //      NUM = NUM +データ。
14          //      num戻り、
15          // }
 16          // NUM = NUM +データ。
17          // --n。
18          // MULT(nは、データ、NUM)。
19          // num戻り、
20          であれば(N == 0戻り 0 ;
21          のためにINT iは= 0、N =!0 ; I ++ 22          {
 23              であれば(N - 1 24              {
 25                  NUM + =データ<< I。  
26                  // データ=データ<< I;
27                  // NUM + =データ。
28 } 29 N = N >> 1 30 } 31 リターンNUM。 32 } 33 }。

 

おすすめ

転載: www.cnblogs.com/Tavi/p/12515942.html