题解 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;
}

posted @ 2020-11-08 19:45  Bushuai_Tang  阅读(738)  评论(2编辑  收藏  举报