无脑解法+正解
2026-10-08 21:42:46
发布于:广东
4阅读
0回复
0点赞
本题可以不需要位运算,只需要数学库里面的对数函数就行了
#include<bits/stdc++.h>
using namespace std;
int main(){
int x;
cin>>x;
double m=log2(x);
int n=(int)m;
if(m!=n){
cout<<"NO";
}
else{
cout<<"YES";
}
}
当然,这种解法涉及到部分测试点不通过的情况(部分测试点爆double),所以我们可以根据2的幂的个位不可能是奇数来优化代码(注意这种特殊情况)然后就得到了这个(对于本题的,因为测试点有点水)AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
long long x,y;
cin>>x;
if(x!=1){
y=x%10;
}
double m=log2(x);
int n=(int)m;
if(m!=n||y%2==1){
cout<<"NO";
}
else{
cout<<"YES";
}
}
附上正解(位运算):
#include<bits/stdc++.h>
using namespace std;
int main(){
long long x;
cin>>x;
if(x>0 && (x&(x-1))==0) {
cout<<"YES";
}
else {
cout<<"NO";
}
return 0;
}
这里空空如也


有帮助,赞一个