将x
转化为二进制数,如果x & 1
,用idx
记录次幂,说明当前位是1,也就是2idx
例如对8来说,转成二进制位100,那么将8右移2位之后(并且次幂加2,
右移一次,次幂加1
),二进制为1,那么此时 1&1 == 1,说明为23
递归运算,将x
转化为2(m)
,之后判断如果m
不为0 或 1 或 2
就继续递归运算即可。
#include <iostream>
using namespace std;
string get(int x)
{
if(x == 0) return "0";
string s = "";
int idx = 0; // 次幂
while(x)
{
if(x & 1) // 将x变为二进制,如果x&1,说明转化为二进制后的当前位是1
{
string temp = "2("+get(idx)+")";
if(idx != 1) s = s == "" ? temp : temp + "+" + s;
else s = s == "" ? "2" : "2+" + s;
}
idx ++; // 次幂加1
x >>= 1; // x向右移动一位
}
return s;
}
int main()
{
int x; cin >> x;
cout << get(x) << endl;
return 0;
}