题解 | 2的幂次方 分治递归

2的幂次方

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;

// 求n的指数形式
string Get2sExponet(int n) {
    if (n == 0) {
        return "0";  // 0单独处理
    }
    vector<int> exp;  // 获取二进制1下标
    // 从大到小 / 从高到低 方便计算值
    for (int i = 15; i >= 0; i--) {
        if ((n & (1 << i)) != 0) {
            // n的二进制中第i位有值1
            exp.push_back(i);
        }
    }

    // n=2^(exp[0]) + 2^(exp[1]) + ... +2^(exp[size-1])
    string res = "";   // result  ==》 res
    for (int i = 0; i < exp.size(); i++) {
        if (i != 0) {
            res += "+";  // 第一个不加 "+" 符号
        }
        if (exp[i] == 1) {
            res += "2";  // 2^1不需要加括号
        } else {
            res += "2(" + Get2sExponet(exp[i]) + ")";  // 递归处理
        }
    }
    return res;
}


int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        printf("%s\n", Get2sExponet(n).c_str());
    }
    return 0;
}

/*
// i = i << 7;  // i在 二进制 基础上左移 n 位
// %d(十进制), %o(八进制), %x(十六进制)
没有直接输出二进制的方法
输出十进制:%d;
输出十六进制:%x;
输出单个字符:%c;
输出字符串:%s;
输出变量所在的地址:%p;
*/

#考研##复试练习#
2025考研复试 文章被收录于专栏

复试ing,努力中。。。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务