#include <iostream>
#include <string>
using namespace std;
string solve(int n)
{
if (n == 0) //特判为0和1的情况
return "0";
if (n == 1)
return "2(0)";
string rnt;
//一个字节数最多32位,首位为符号位
//也可以用除2法求为1的位数
for (int i = 30; i >= 0; i--) //二进制分解过程
{
//这一步是判断二进制表示下为1的索引号位
//<<操作是将二进制数往右边移i位
//&操作两边都为1才返回1
if ((n >> i) & 1)
//若i为1
{
if (!rnt.empty()) //不为首部要加+号
rnt += "+";
if (i == 1) //如果为2^1直接加2
rnt += "2";
else
rnt += "2(" + solve(i) + ")";
}
}
return rnt;
}
int main()
{
string s;
int n;
cin>>n;
s=solve(n);
cout<<s;
}
标签:表示,return,string,二进制,完全,int,solve,rnt
From: https://www.cnblogs.com/vvvv214/p/16853214.html