#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <cstring> #include<iostream> #include<algorithm> #include<vector> using namespace std; //描述 // 每个正数都可以用指数形式表示。例如,137 = 2 的 7 次方 + 2 的 3 次方 + 2 的 0 次方。 //我们用a(b)的形式来表示a的b次方。那么137就可以表示为2(7) + 2 (3) + 2 (0)。 //由于7 =2的2次方 + 2 + 2 的 0 次方,且 3 = 2 + 2 的 0 次方 //所以137最终表示为 2(2(2)+2+2(0))+2 (2 + 2 (0)) + 2 (0)。给定一个正数 n //你的任务是将 n 用仅包含数字 0 和 2 的指数形式表示出来。 //输入描述 //对于每一个测试用例,输入文件中包含一个正整数 n(n <= 20000)。 //输出描述 //对于每一个测试用例,你应该在单独的一行上输出 n 的指数形式。 //注意,这一行中不应该有任何额外的空白字符。 //2(7) + 2 (3) + 2 (0) ->>>> 2(2(2)+2+2(0))+2 (2 + 2 (0)) + 2 (0) string toTwo(int n) { if (n == 0) { return "0"; } vector<int> exp; for (int i = 20; i >= 0; i--) { if ((n & (1 << i)) != 0) { exp.push_back(i); } } string res = ""; for (int i = 0; i < exp.size(); i++) { if (i != 0) { res += "+"; } if (exp[i] == 1) { res += "2"; } else { res += "2(" + toTwo(exp[i]) + ")"; } } return res; } int main() { int n; scanf("%d", &n); string str = toTwo(n); printf("%s\n", str.c_str()); return 0; }