题解

null  •  2年前


void print(int n,bool tag){

if(n == 0) return;
if(tag)cout<<"+";
if (n == 1) {
    cout<<"2(0)";return;
}
else if (n == 2) {
    cout<<"2";return;
}else{
    //找到当前最大指数先输出
    int i ;
    for(i = 0;;i++){
        if(pow(2, i)>n)break;
    }
    i--;
    //最高指数为1时特殊输出
    if(i == 1){
        cout<<"2";
    }else{
        cout<<"2(";
        //cout<<"i是"<<i;
        print(i,false);
        cout<<")";
    }
    
    //输出剩下的指数(直接输出会存在问题,可能没有后续的指数了)

// 输入 // 48 // 输出 // 2(2(2)+2(0))+2(2(2)+)+

    //cout<<"+";
    print(n-pow(2, i),true);
}

}

int main(int argc, const char * argv[]){

int n;cin>>n
print(n,0);
return 0;

}


评论:

请先登录,才能进行评论