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;
}
评论:
请先登录,才能进行评论