Oferta de Jianzhi (C++) -JZ64: encontrar 1+2+3+...+n (operación de algoritmo-bit)

Autor: Zhai Tianbao Steven
Declaración de derechos de autor: Los derechos de autor pertenecen al autor. Para reimpresión comercial, comuníquese con el autor para obtener autorización. Para reimpresión no comercial, indique la fuente

Descripción del Título:

Para encontrar 1+2+3+...+n, es necesario no utilizar palabras clave como multiplicación y división, for, while, if, else, switch, case y declaraciones de juicio condicional (A?B:C) .

Rango de datos: 0<n≤200
Avanzado: Complejidad espacial O(1), complejidad temporal O(n)

Ejemplo:

ingresar:

5

valor de retorno:

15

Ideas para resolver problemas:

Esta pregunta examina las operaciones de bits. Dos formas de resolver el problema. Aunque el tema es un resumen simple, es un poco interesante debido a la adición de muchas restricciones.

1) Recursión de operación de bits

       Utilice la recursividad para completar la suma de 1 a n, combinada con las características de la operación, cuando n es 0, el lado derecho de && no se ejecuta y la recursividad finaliza.

2) Fórmula de suma

       Sn=(n+1)*n/2, transformado en (n*n+n)>>1, n*n se realiza mediante la función pow, que evita la restricción de multiplicación, y la división por 2 se realiza mediante desplazamiento a la derecha, lo que evita la restricción de división.

Código de prueba:

1) Recursión de operación de bits

class Solution {
public:
    int Sum_Solution(int n) {
        // 与运算判断n是否为正数,若n为0,则与运算后续不执行
        n && (n += Sum_Solution(n - 1));
        return n;
    }
};

2) Fórmula de suma

class Solution {
public:
    int Sum_Solution(int n) {
        // Sn=(n*n+n)/2
        int result = (int(pow(n, 2)) + n) >> 1;
        return result;
    }
};

Supongo que te gusta

Origin blog.csdn.net/zhaitianbao/article/details/132423133
Recomendado
Clasificación