日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断二进制半整数

發布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断二进制半整数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/contest/326/A
來源:牛客網
?

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld

題目描述

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。

示例1

輸入

3 48 49 50

輸出

YES NO NO

判斷一個數二進制表示是否只有兩個1.

直接判斷n-lowbit(n)是否為2的冪次

fun判斷是否為2的冪次

lowbit取出最低位1的值

要注意long long

ac:

#include<bits/stdc++.h> #define ll long long using namespace std;bool fun(ll n){return (!(n & (n-1))) && n; }ll lowbit(ll x){return x&(-x); }int main() {int t,a;ll n,c;cin>>t;while(t--){cin>>n;if(n%2==1){printf("NO\n");continue;}if(fun(n)==1){if(n!=2)printf("YES\n");else printf("NO\n");continue;}if(fun(n-lowbit(n))==1)printf("YES\n");else printf("NO\n");}return 0; }

我剛開始用pow寫,怎么都過不了,后來發現pow前面要加long long,慘

#include<bits/stdc++.h> #define ll long long using namespace std;bool fun(ll n){return (!(n & (n-1))) && n; }int main() {int t,a;ll n,c;cin>>t;while(t--){cin>>n;if(n%2==1||n==0){printf("NO\n");continue;}if(fun(n)==1){if(n!=2)printf("YES\n");else printf("NO\n");continue;}ll m=n;a=0;while(m>1){m=m>>1;a++;}if(fun(n-(ll)pow(2,a))==1)printf("YES\n");else printf("NO\n");}return 0; }

?

轉載于:https://www.cnblogs.com/wangtao971115/p/10358224.html

總結

以上是生活随笔為你收集整理的判断二进制半整数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。