5 solutions
-
4
思路一
由于是二的整数幂那么,这个m值一定是要大于0的,其次由于是整数幂,我们将
m
和m-1
做一个&
与运算,答案一定是0,例如,当m为8时,m的二进制为,那么的二进制为:,将这两个数按照二进制与起来答案显然是0的,而且所有的二的整次幂都满足该条件代码
#include<iostream> int main() { long long n,m; std::cin>>n; while(n--){ std::cin>>m; if(m > 0 && ((m-1) & m) == 0) std::cout<<"YES"<<std::endl; else std::cout<<"NO"<<std::endl; } return 0; }
思路二
同样是利用数位二进制的特性,我们求出m的,然后将其与m做一个比较如果相等并且m的值大于0,说明该m也是一个二的整次幂
代码
#include<iostream> int main() { long long n,m; std::cin>>n; while(n--){ std::cin>>m; if(m > 0 && (-m & m) == m) std::cout<<"YES"<<std::endl; else std::cout<<"NO"<<std::endl; } return 0; }
-
1
先将2的幂次方都计算出来,存入一个数组中。 再用二分查找看给的数是否在数组中。 题解这里格式有点乱,。。。。
#include<bits/stdc++.h> using namespace std; typedef long long LL; int main(){ int m; cin>>m; vector<LL> a; int i; for(i=0;i<=100;i++){ a.push_back(pow(2,i)); } LL n; while(m--){ cin>>n; /////////////二分查找模板//////////////////// int left = 0; int right = a.size() - 1; bool flag = false; while(left<=right){ int middle = left + ((right - left)/2); if(a[middle]>n){ right = middle - 1; } else if(a[middle]<n){ left = middle + 1; } else{ flag = true; break; } } /////////////二分查找模板//////////////////// if(flag == true){ cout<<"YES"; } else{ cout<<"NO"; } cout<<endl; } return 0; }
-
1
我水平不够,于是就暴力求解
#include <iostream> using namespace std; int main() { int T = 0; cin >> T; while(T--) { int n = 0; cin >> n; if(n == 1 || n == 2) { cout << "YES" << endl; continue; } if(n%2) cout << "NO" << endl; else { while(n>2) { n /= 2; if(n % 2) break; } if(n==2) cout << "YES" << endl; else cout << "NO" << endl; } } return 0; }
-
0
#include <stdio.h> #include <algorithm> #include <math.h> #include <vector> #include <iostream> using namespace std; long long n,m; int main() { scanf("%lld",&n); while(n--) { scanf("%lld",&m); if(m==1) { printf("YES\n"); continue; } else { long long tmp=1; while(tmp<m) { tmp*=2; } if(tmp==m) printf("YES\n"); else printf("NO\n"); } } return 0; }
- 1
Information
- ID
- 47
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 1452
- Accepted
- 227
- Uploaded By