提交时间:2024-08-20 14:20:39
运行 ID: 168889
#include <iostream> #include <iomanip> #include <vector> #include <cmath> #include <string> #include <climits> #include <cstdio> #include <queue> #include <stack> #include <map> #include <set> #include <set> #include <algorithm> using namespace std; int myPow(int base, int mode) { int res = 1; while (mode) { if (mode & 1) res *= base; base *= base; mode >>= 1; } return res; } void solve(int n) { if (!n) return; //递归终止条件 int mode; //记录指数幂 for (int i = 0; i <= 15; ++i) { mode = i; if (myPow(2, mode) > n) { //找不超过n的最小指数 --mode; break; } } if (mode == 0) cout << "2(0)"; else if (mode == 1) cout << 2; else { cout << "2("; //这里容易遗漏2 solve(mode); //将指数进一步分解 cout << ")"; } //如果n不等于2^mode,将余下的部分分解 if (n != myPow(2, mode)) { cout << "+"; //余下的部分用加号连接 solve(n - myPow(2, mode)); } } int main() { std::ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; solve(n); return 0; }