正经题解 —— vector解法
2024-12-03 21:24:36
发布于:浙江
0阅读
0回复
0点赞
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
// 如果 n 是奇数,直接输出 -1
if (n % 2 == 1) {
cout << -1 << endl;
return 0;
}
vector<int> powers;
for (int i = 0; n > 0; ++i) {
if (n & 1) { // 检查当前位是否为 1
powers.push_back((1 << i)); // 计算 2 的 i 次幂
}
n >>= 1; // 右移一位
}
// 如果没有找到任何 2 的正整数次幂,输出 -1
if (powers.empty()) {
cout << -1 << endl;
return 0;
}
// 从大到小输出
for (int i = powers.size() - 1; i >= 0; --i) {
if (i != powers.size() - 1) {
cout << " ";
}
cout << powers[i];
}
cout << endl;
return 0;
}
代码解释
1、读取输入:读取一个整数 ( n )。
2、奇数判断:如果 ( n ) 是奇数,直接输出 -1 并结束程序。
3、二进制转换:通过右移和按位与操作,将 ( n ) 转换为二进制,并记录每个 1 对应的 2 的次幂。
4、输出结果:如果找到了若干个 2 的正整数次幂,从大到小输出这些次幂的值;否则输出 -1。
~~其实是ac助手的代码~~
这里空空如也
有帮助,赞一个