LeetCode :. 08.05 recursivas preguntas cara multiplicación

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 };

 

Supongo que te gusta

Origin www.cnblogs.com/Tavi/p/12515942.html
Recomendado
Clasificación