Lenguaje Luogu C++ | Potencia P1010

¡Aprende C++ desde pequeño! Registre las preguntas formuladas durante el proceso de preparación de exámenes y aprendizaje de Luogu C ++, y registre cada momento.

Adjunto una publicación resumida: Lenguaje C ++ de Luogu | Resumen_El blog de un comunicador que ama la programación-blog CSDN


[Descripción del Título]

Cualquier número entero positivo se puede representar mediante una potencia de 2. Por ejemplo, 137=2^7+2^3+2^0.

Al mismo tiempo, se acuerda que la potencia se expresa entre paréntesis, es decir,  a^b  se puede expresar como  a ( b ).

Se puede ver que 137 se puede expresar como 2(7)+2(3)+2(0)

más:

7 = 2 ^ 2 + 2 + 2 ^ 0 (2 ^ 1 está representado por 2) y 3 = 2 + 2 ^ 0.

Entonces, finalmente, 137 se puede expresar como 2(2(2)+2+2(0))+2(2+2(0))+2(0).

Otro ejemplo es 1315=2^10+2^8+2^5+2+1

Entonces 1315 finalmente se puede expresar como 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+ 2 (0).

【ingresar】

Un número entero positivo  n por línea .

【Producción】

Una representación convencional  0,2 de n  (sin espacios en la representación).

【Muestra de entrada】

1315

【Muestra de salida】

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

[Explicación detallada del código]

#include <bits/stdc++.h>
using namespace std;
int mark[20] = {1};
void f(int n) 
{
    int flag = 0;
    while (n>=mark[flag]) {
        flag++;
    }
    flag--;
    if (flag==1) {
        cout << 2;
    } else {
        if (flag==0) {
            cout << "2(0)";
        } else {
            cout << "2(";
            f(flag);
            cout << ")";
        }
    }
    n -= mark[flag];
    if (n!=0) {
        cout << "+";
        f(n); 
    }

}
int main()
{
    int n; 
    cin >> n;
    for (int i=1; i<17; i++) mark[i] = mark[i-1] * 2;
    f(n);
    return 0;
}

【resultado de la operación】

137
2(2(2)+2+2(0))+2(2+2(0))+2(0)

Supongo que te gusta

Origin blog.csdn.net/guolianggsta/article/details/134004867
Recomendado
Clasificación