#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
const double PI = acos(-1.0);
const double e = 2.718281828459;
const double eps = 1e-8;
void solve(int n)
{
    int a[33];
    int num = 0;
    int idx = 0;
    while(n)  //二进制运算,把1的位置保存起来
    {
        if(n&1)
            a[num++] = idx;
        n >>= 1;
        idx++;
    }
    for(int i = num-1; i >= 0; i--)
    {
        if(a[i] == 0)
            printf("2(0)");
        else if(a[i] == 1)
            printf("2");
        else if(a[i] == 2)
            printf("2(2)");
        else
        {
            printf("2(");  // 当1的位置 > 2时,就要再进行拆分
            solve(a[i]);  // 递归处理
            printf(")");
        }
        if(i)
            printf("+");
    }
}
int main()
{
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    int n;
    while(cin>>n)
    {
        solve(n);
        printf("\n");
    }
    return 0;
}
原文:http://blog.csdn.net/u014028317/article/details/44541673