题解 | 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,努力中。。。
查看9道真题和解析
