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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM