判斷二進位制半整數(二進位制)
阿新 • • 發佈:2018-12-31
連結:https://ac.nowcoder.com/acm/contest/326/A
來源:牛客網
題目描述
10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進位制下1024是"二進位制整數"。一個正整數滿足其值為2的k次方(k為正整數)我們定義其為"二進位制整數"。現在定義另一種數,其可拆分成兩個"二進位制整數"的和,我們稱作"二進位制半整數"。給你一個數,你需要判定其是否為"二進位制半整數"。例如48,雖然不是"二進位制整數",但是可以拆成32+16,滿足"二進位制半整數"。
輸入描述:
第一行輸入一個正整數T(T<=2000),表示T組樣例,每組樣例輸入一行一個非負整數N(N<=4*10^18)。
輸出描述:
對於每個輸入的整數,是"二進位制半整數"輸出YES,否則輸出NO。
注意2不是,wa兩發我日。。。
#include <bits/stdc++.h> #define mem(ar,num) memset(ar,num,sizeof(ar)) #define me(ar) memset(ar,0,sizeof(ar)) #define lbt(x) (x&(-x)) #define INF 0x3f3f3f3f #define IOS ios::sync_with_stdio(false) #define ll long long using namespace std; ll n; int main(){IOS; int t; cin>>t; while(t--){ cin>>n; ll a[3],sum=4; a[1]=2,a[2]=2; for(int i=1;i<=2;i++){ while(sum+a[i]<=n){ sum+=a[i]; a[i]<<=1; } } if(sum!=n)cout<<"NO"<<endl; else cout<<"YES"<<endl; } return 0; }