You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
int n;
|
|
|
|
|
|
|
|
|
|
string dfs(int n) {
|
|
|
|
|
if (n == 0) return "0";
|
|
|
|
|
string res = "";
|
|
|
|
|
|
|
|
|
|
//遍历二进制的每一位
|
|
|
|
|
for (int i = 14; i >= 0; i--) {//从大到小噢
|
|
|
|
|
//13最后一个点会WA,14可以AC
|
|
|
|
|
//2^15=32768
|
|
|
|
|
//2^14=16384
|
|
|
|
|
//2^13=8192
|
|
|
|
|
//2*10^4=2*10000=20000
|
|
|
|
|
if ((n >> i) & 1) { //如果本位上有数字1
|
|
|
|
|
if (i == 1)//2^1需要写成2的形式,这是递归的出口
|
|
|
|
|
res += "2";
|
|
|
|
|
else {
|
|
|
|
|
//2^0,2^2,2^3...都需要写成2(n)的形式
|
|
|
|
|
res += "2(";
|
|
|
|
|
if (i > 2)//大于2的才需要再次分解,递归就可以了
|
|
|
|
|
res += dfs(i);
|
|
|
|
|
else//这里处理0和2的情况,它俩是一样的处理方式2(0),2(2),也就是2(to_string(i))
|
|
|
|
|
res += to_string(i);
|
|
|
|
|
//加上后扩号
|
|
|
|
|
res += ")";
|
|
|
|
|
}
|
|
|
|
|
//利用+号拼接在一起
|
|
|
|
|
res += "+";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//控制是不是显示最后的+号
|
|
|
|
|
if (res[res.size() - 1] == '+')res.pop_back();//最后一位是+号的,肯定是加多了,弹出去~
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
cin >> n;
|
|
|
|
|
cout << dfs(n) << endl;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|