//实际是将求正整数n能分解成最少多少个2的次方的合集的问题 void decomposeIntoPowersOfTwo(unsigned int n, std::vector<int>& powers) { for (int i = 0; n > 0; ++i) { if (n & 1) { // 如果当前位是1 powers.push_back(i); // 将对应的指数添加到集合中 } n >>= 1; // 右移一位 } }