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