题解 2020 CSP-J组 T1 【优秀的拆分(power)】
Description
题号 | 出处 | 参考难度 | \(AC\)时间及记录 |
---|---|---|---|
\(\texttt{洛谷P7071}\) | \(\texttt{2020-CSP-J组-T1}\) | \(\texttt{洛谷难度:普及-}\) | \(\texttt{On 2020/11/08}\) |
Solution
总览一下
总览一下:
这道题目还是比较简单的,我在考场上用了五六分钟就做出来了。
首先我们可以想到:只有\(N\)是奇数时,才会无解,也就是直接输出\(-1\)。
然后我们会发现,我们只需要把\(N\)转成二进制数。
再直接输出即可。
毕竟是签到题,大家都是\(100\)分。
二进制转换
二进制转换:
顺便提一下进制转换吧。
我一般十进制转二进制会这样写:
register string S;
S="";
while(N)
{
register int Now;
Now=N%2;
S=(char)(Now+'0')+S;
N>>=1;
}
其实就是模拟了一下我们平时手算的短除法。
Code
\(Code\):
\(FreOpen\)勿忘!
如果是\(Online Judge\)请记得删掉\(FreOpen\)!
#include<bits/stdc++.h>
using namespace std;
int N;
int main()
{
freopen("power.in","r",stdin);
freopen("power.out","w",stdout);
cin>>N;
register string S;
S="";
while(N)
{
register int Now;
Now=N%2;
S=(char)(Now+'0')+S;
N>>=1;
}
register int i;
if(S[S.size()-1]=='1')
{
cout<<-1<<endl;
return 0;
}
for(i=0;i<S.size();i++)
{
if(S[i]=='1')
{
cout<<(1<<(S.size()-i-1))<<' ';
}
}
cout<<endl;
return 0;
}
不要妄图追上西坠的太阳,而是要在黎明前就等着它!