problem

solution

codes

#include<iostream>
using namespace std;
void dfs(int dep, int n){
//if(n<=2){ cout<<n; return; }
int flag = 0;
for(int i = dep; i >= 0; i--){
if(n&(1<<i)){
if(flag)cout<<"+";
if(i == 1)cout<<2;
else if(i==0||i==2)cout<<"2("<<i<<")";//等价于边界条件
else{
cout<<"2(";
dfs(dep,i);
cout<<")";
}
flag = 1;
}
}
}
int main(){
int n; cin>>n; dfs(30,n);
return 0;
}