题解 | #2的幂次方#
2的幂次方
https://www.nowcoder.com/practice/7cf7b0706d7e4b439481f53e5fdac6e7
#include <iostream> #include <vector> using namespace std; void c_bit(int x) { if (x == 0) { cout << 0; } else if (x == 1 || x == 2) { cout << 2; } else { vector<int> c_bits; int flag = 0; while (x != 0) { c_bits.push_back(x % 2); if (!flag && x % 2 == 1) flag = c_bits.size();//记录最低有效位坐标+1 x /= 2; } for (int i = c_bits.size() - 1; i > -1; i--) { if (c_bits[i] == 1) {//2^1的处理不同 if (i != 1) cout << "2("; c_bit(i); if (i != 1)cout << ')'; if (i != flag - 1) cout << '+'; else break;//到达最低有效位不用输出+,更低位不用进行,跳出循环 } } //c_bits.clear(); } } int main() { int num; cin >> num; c_bit(num); }
递归,2^1和最低有效位特殊处理