#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