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