递归思想要好好消化,先得出非零的幂,然后按幂从高到低组字符串
#include <iostream>
#include "vector"
using namespace std;
vector<int> getExponential(int n) {
vector<int> ans;
int exp = 0;
while (n != 0) {
if (n % 2 == 1) ans.push_back(exp);
n /= 2;
exp++;
}
return ans;
}
string present(int n) {
vector<int> exps = getExponential(n);
string ans;
for (int i = exps.size()-1; i >=0; i--) {
int item = exps[i];
if (item == 0)ans += "2(0)";
else if (item == 1) ans += "2";
else if (item == 2) ans += "2(2)";
else {
ans += "2(" + present(item) + ")";
}
if (i != 0) ans += "+";
}
return ans;
}
int main() {
int n;
while (cin >> n) { // 注意 while 处理多个 case
cout <<present(n) << endl;
}
}
// 64 位输出请用 printf("%lld")

京公网安备 11010502036488号