总体上,是将输入的正整数用二进制来表示。
使用bitset
#include<bitset>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
vector<string> res;
void dfs(int u)
{
bitset<16>a(u);
bool first=true;
for(int i=15;i>=0;i--)
{
if(a.test(i)) //如果第i位是1
{
if(!first)
{
res.push_back("+");
}
else first=false;
if(i==0)res.push_back("2(0)"); //如果在第0位,则是2的0次幂
else if(i==1)res.push_back("2"); //如果在第1位,则是2的1次幂
else { //如果位置大于1,则需要将该位置i也转换为二进制
res.push_back("2(");
dfs(i);
res.push_back(")");
}
}
}
}
int main(){
int x;
cin>>x;
dfs(x);
for(auto l: res)cout<<l;
cout<<endl;
return 0;
}