题解

null · 发布于 2021-12-25 · 浏览 794 回复 0

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;

}

全部回复 共 0 条

还没有人回复。往下写第一条。

发表回复