加载中...

二进制的完全表示

#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;
}
posted @ 2022-11-03 08:38  biubidio  阅读(67)  评论(0)    收藏  举报