[CSP-J 2020]T1题解
2026-06-19 15:58:59
发布于:江苏
5阅读
0回复
0点赞
本人初一,请多指教
思路讲解
- 若为奇数,则直接输出
-1 - 若为偶数,则将该数转为二进制,用栈存储每一个二进制位,倒序输出非零位与相应权值的乘积
代码范例
#include<bits/stdc++.h>
using namespace std;
stack<int>s1;//定义栈s1
int main()
{
int n;
cin>>n;
if(n%2)cout<<-1<<endl,exit(0);//n为奇数时直接输出-1
while(n)//n为偶数
{
s1.push(n%2);//二进制位入栈
n/=2;
}
while(!s1.empty())//栈非空
{
if(s1.top())cout<<(int)(s1.top()*pow(2,s1.size()-1))<<" ";//依据LIFO原则倒序输出非零位与权值之积
s1.pop();//栈顶元素出栈
}
cout<<endl;
return 0;
//by xty
}
注意事项
使用pow(a,b)函数时需注意double->int的转换,且b为s1.size()-1,即 (为正整数,相当于s1.size())
Thanks for watching!
这里空空如也

有帮助,赞一个