¡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)