分析
-
本题的考点:递归回溯
-
将输入数据
n
看成一个二进制数据,看每位是否为1
,是1
的话,判断对应的是否是最低位或者次低位,最低位加上”2(0)”,次低位加上”2”,否则递归求解指数的表示即可。
代码
#include <iostream>
using namespace std;
string dfs(int n) {
string res;
// 2^14 = 16,384 < 20000 < 2^15 = 32,768
for (int i = 14; i >= 0; i--)
if (n >> i & 1) {
if (res.size()) res += "+";
if (!i) res += "2(0)";
else if (i == 1) res += "2";
else res += "2(" + dfs(i) + ")";
}
return res;
}
int main() {
int n;
while (cin >> n) {
cout << dfs(n) << endl;
}
return 0;
}