题解 | #2的幂次方#

2的幂次方

https://www.nowcoder.com/practice/7cf7b0706d7e4b439481f53e5fdac6e7

#include <iostream>
#include <vector>
using namespace std;

void c_bit(int x) {
    if (x == 0) {
        cout << 0;
    } else if (x == 1 || x == 2) {
        cout << 2;
    } else {
        vector<int> c_bits;
        int flag = 0;
        while (x != 0) {
            c_bits.push_back(x % 2);
            if (!flag && x % 2 == 1) flag = c_bits.size();//记录最低有效位坐标+1
            x /= 2;
        }
        for (int i = c_bits.size() - 1; i > -1; i--) {
            if (c_bits[i] == 1) {//2^1的处理不同
                if (i != 1)    cout << "2(";
                c_bit(i);
                if (i != 1)cout << ')';
                if (i != flag - 1) cout << '+';
                else    break;//到达最低有效位不用输出+,更低位不用进行,跳出循环
            }
        }
        //c_bits.clear();
    }
}

int main() {
    int num;
    cin >> num;
    c_bit(num);
}

递归,2^1和最低有效位特殊处理

全部评论

相关推荐

路过的奥特曼:你是我见过最美的牛客女孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务