递归,注意2^1的时候,以及如果当前的num==0了 就不再需要后面有+号
#include<bits/stdc++.h>
using namespace std;
int n;
void solve(int num){
int i ;
if(num==0) printf("0");
while(num > 0){
for(i=0;;i++){ //找出临近的次幂
if( (1<<i) > num) {
i--;
break;
}
}
printf("2");
num-=(1<<i);
if(i!=1) { //1次幂不需要递归
printf("(");
solve(i);
printf(")");
}
if(num!=0)
printf("+");
}
}
int main(){
scanf("%d",&n);
solve(n);
}