5 solutions

  • 4
    @ 2022-2-28 19:44:07

    思路一

    由于是二的整数幂那么,这个m值一定是要大于0的,其次由于是整数幂,我们将mm-1做一个&与运算,答案一定是0,例如,当m为8时,m的二进制为10001000,那么m1m-1的二进制为:01110111,将这两个数按照二进制与起来答案显然是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的lowbit(m)lowbit(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
      @ 2023-8-15 10:00:59

      先将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
        @ 2022-4-5 1:12:36

        我水平不够,于是就暴力求解

        #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;
        }
        
        • 1
          @ 2022-4-2 21:27:10
          #include<stdio.h>
          int main(){
          	long long num;//要判断的数 
          	int m;
          	int count;
          	scanf("%d",&m);
          	for(int i=0; i<m; i++){//m行数 
          		scanf("%lld",&num);
          		//是2的幂次方只有两个条件,1:大于0  2:二进制只有一个1,因此一旦减1比为0 
          			if((num&(num-1))== 0 && num>0)
          			  printf("YES\n");
          			else
          			  printf("NO\n");
          	}
          }
          
          • 0
            @ 2022-3-7 21:40:23
            #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