インタビューの質問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データ、INT&NUM) 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 }。