题解 | 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,努力中。。。