写了好久注释,给个赞吧 根据晏子球的改变了一下

#include<bits/stdc++.h>
using namespace std;
void num(int n){//n为所计算数
if(n==1){
printf("2(0)");//如果n剩下的值为1,就返回2(0)【因为2(0)=1】
}else if(n==2){
printf("2");//因为表示数仅有0,2,所以这里需要输入2而不是2(1)
}else if(n==0){
return;//返回
}else{
int i,j;
for(i=1;i<=15;i++){//因为n<20000所以n<2^15(32768)
int number=2;
for(j=2;j<=i;j++){
number=number*2;
} //循环嵌套算出2的i次方
if((n-number)>=0 and (n-number)<number){//同上,判断如果原数减去number在>=0且<number时,就进一步判断
n-=number;
if(i==2){//因为“因为表示数仅有0,2”所以当2(2)时就可以输出的
printf("2(%d)",i);
if(n!=0) printf("+");//假如,n还有剩余的话就要加的
}else if(i==1){//同上,表示数仅有0,2,则2(1)要化为2
printf("2");
if(n!=0) printf("+");//假如,n还有剩余的话就要加的
}else{
printf("2(");
num(i);
printf(")");//如果i的 值不等于0,2就要继续推
if(n!=0) printf("+");//假如,n还有剩余的话就要加的
}
num(n);
}
}
}
}
int main(){
int s;
cin>>s;
num(s);
return 0;
}