递归很强大。
#include <cstdio>
#include <iostream>
using namespace std;
void Int2Str(int x, string &s){
if(x == 0 || x == 2){
s.push_back('0'+x);
return;
}
int index = 0;
int tag = 0;//本子域输出过,需要输出加号 的标记
while(x){
if(x%2){
if(tag){
s.push_back('+');
}
tag = 1;
if(index != 1){
s.push_back(')');
Int2Str(index, s);
s.push_back('(');
}
s.push_back('2');
}
x /= 2;
index++;
}
}
int main(){
string s;
int x;
while(scanf("%d",&x) != EOF){
Int2Str(x, s);
for(int i=s.size()-1; i>=0; i--){
printf("%c",s[i]);
}
printf("\n");
s.clear();
}
return 0;
}