3483. 2的幂次方
⭐️难度:中等
⭐️类型:分治
📖题目:题目链接

📚题解:
cpp
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
string Get2sExponet(int n) {
if (n == 0) {
return "0";
}
vector<int> exp;
for (int i = 15; i >= 0; --i) {
if ((n & (1 << i)) != 0) {
exp.push_back(i);
}
}
// n = 2^(exp[0]) + 2^(exp[1]) + ... + 2^(exp[size-1])
string res = "";
for (int i = 0; i < exp.size(); ++i) {
if (i != 0) {
res += "+";
}
if (exp[i] == 1) {
res += "2";
}
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;
}