递归很强大。

#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;
}