分析一下整个思路,位运算着重讲一下
旁边是一个样例
感谢(^_^)
string solve(int n)
{
if (n == 0) return "0";
if (n == 1) return "2(0)";
string rnt;
for (int i = 30; i >= 0; i--) // i从n的二进制的第30位依次循环至第0位,第31位为符号位
{
if ((n >> i) & 1) // 如果第i位是1,则表示2^i,2的i次方
{
if (!rnt.empty()) // 不为首部要加"+"号
rnt += "+";
if (i == 1) // 如果为2^1,直接加2
rnt += "2";
else // 否则的话,继续拆分2^i,即递归拆分i为2(...)形式
rnt += "2(" + solve(i) + ")";
}
}
return rnt;
}
看不明白这个输出的结果是啥意思,2(0)和2(2)各自代表什麽呢