题目地址
代码:
#include< iostream>
#include< cstdio>
#include< cstdlib>
#include< cstring>
#include< string>
#include< vector>
#include< algorithm>
#include< cmath>
#include< stack>
using namespace std;
stack<int> st;
void dfs(int n)
{
// if(n==0||n==1||n==2)return ;
for(int i=0;i<=20;i++){
if(((n>>i)&1)==1){
st.push(i);
//st.push(-1);
}
}
while(!st.empty()){
int pre=st.top();
st.pop();
if(pre==-1){
if(st.empty())
printf(")");
else{
int ko=st.top();
if(ko==-1){
printf(")");
}
else{
printf(")+");
}
}
}
else if(pre==0){
printf("2(0)");
}
else
if(pre==1){
if(st.empty())
printf("2");
else{
int next=st.top();
if(next==-1){
printf("2");
}
else{
printf("2+");
}
}
}
else
if(pre==2){
if(st.empty()){
printf("2(2)");
}
else{
int nxt=st.top();
if(nxt==-1){
printf("2(2)");
}
else{
printf("2(2)+");
}
}
}
else{
printf("2(");
st.push(-1);
dfs(pre);
//printf(")");
}
}
}
int main()
{
int n;
scanf("%d",&n);
while(!st.empty()){
st.pop();
}
/*for(int i=1;i<=n;i++){
dfs(i);
printf("\n");
}*/
dfs(n);
return 0;
}