preguntas de la entrevista 08.05. multiplicación recursiva
Temas requisitos:
la multiplicación recursiva. Escribir una función recursiva, el operador * no se usa, para lograr la multiplicación de dos números enteros positivos. Puede utilizar la más, menos, el desplazamiento, pero el número medio.
Ideas de resolución de problemas:
Pensamiento 1: adición directa de la multiplicación en una pluralidad de n, la comparación de la violencia directa;
En el que determinar el número de pequeñas, a continuación, se añaden una gran cantidad de datos, un total de n más.
2 ideas:
El uso de bits 1 bit aritméticos, binarios, 2 ^ una diferencia entre dos bits adyacentes;
2. Los mismos números en las dos máximo y mínimo;
3. Al determinar el bit más bajo es 1, la operación de cambio, y se añaden cada turno juntos.
例子: A = 9, B = 7; A x B = 9 x (2 ^ 2 + 2 ^ 1 + 2 ^ 0) = 9 << 2 + 9 << 1 + 9;
1 clase Solution { 2 pública : 3 int multiplicar ( int A, int B) 4 { 5 int num = 0 ; 6 de retorno (A> B)? mult (B, A, num): mult (A, B, num); 7 } 8 9 int mult ( int n, int datos, int y num) 10 { 11 // si (n == 1) 12 // { 13 // num = num + datos; 14 // num retorno; 15 // } 16 // num = num + datos; 17 // -N; 18 // mult (n, datos, num); 19 // num retorno; 20 si (n == 0 ) de retorno 0 ; 21 para ( int i = 0 ; n = 0 ; i ++ ) 22 { 23 si (n y 1 ) 24 { 25 Num + = datos << i; 26 // datos = datos << i; 27 // num + = datos;
28 } 29 n = n >> 1 ; 30 } 31 de retorno num; 32 } 33 };