7 条题解

  • 1
    @ 2024-10-15 21:03:33
    快速幂也能写
    #include <iostream>
    #define ll long long
    using namespace std;
    ll c[1000];
    int main(){
        ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
        c[1] = 1;
        int cnt = 1;
        for(int i = 1 ; i <= 63 ; i++){
            ll x = 2,b = i,ans = 1;
            while(b){
                if(b % 2){
                    ans *= x;
                }
                x *= x;
                b /= 2;
            }
            c[++cnt] = ans;
        }
        int n;
        cin >> n;
        for(int i = 1 ; i <= n ; i++){
            ll x;
            cin >> x;
            int l = 1,r = 63;
            while(l < r){
                int mid = (l + r) / 2;
                if(c[mid] >= x){
                    r = mid;
                }
                else l = mid + 1;
            }
            if(c[l] == x){
                cout << "YES" << '\n';
            }
            else cout << "NO" << '\n';
        }
        return 0;
    }
    
    • 1
      @ 2024-10-10 19:44:43

      #include <stdio.h>

      int main ()

      {

      int m;

      scanf("%d",&m);

      for(int i=0;i<m;i++){

      long long a;

      scanf("%lld",&a);

      while(a>1&&a%2==0){

      a/=2;

      }

      if(a==1){

      printf("YES\n");

      }else{

      printf("NO\n");

      }

      }

      return 0;

      }

      • 1
        @ 2023-9-30 15:25:12
        补一个学长上课讲过的运算操作符
        ```#include<iostream>
        using namespace std;
        int main()
        {
        	int m;
        	cin>>m;
        	while(m--)
        	{
        		long long n;
        		cin>>n;
        			if((n&(n-1))==0)
        			{
        				cout<<"YES"<<endl;
        			}
        			else
        			{
        				cout<<"NO"<<endl;
        			}
        	}
        }
        ``````
        
        • 0
          @ 2025-4-19 12:13:54

          Python 打表

          利用set查找功能+打表,平时别用,考试优选

          a={1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976, 2305843009213693952, 4611686018427387904, 9223372036854775808, 18446744073709551616}
          m=int(input())
          for _ in range(m):
              x=int(input())
              if x in a:
                  print('YES')
              else:
                  print('NO')
          
          • 0
            @ 2024-10-2 22:41:14
            #include<stdio.h>
            int main(){
            int i,n;
            scanf("%d",&n);
            for(i=1;i<=n;i++){
            long long m;
            scanf("%lld",&m);
            int count=0;
            while(m)
            {
            if(m&1)
            //判断该数字二进制尾数是否为1
            count++;
            m=m>>1;
            }
            if(count == 1)
            printf("YES\n");
            else
            printf("NO\n");
            }
            return 0;
            }
            
            • 0
              @ 2023-9-30 15:57:06

              位运算解法

              #include<stdio.h>
              int main()
              {
                  int m;
                  scanf("%d",&m);
                  for(int i=0;i<m;i++)
                  {
                      long long n;
                      scanf("%lld",&n);
                      if(n==0){
                          printf("NO\n");
                      }
                      else if((n&(n-1))==0){
                          printf("YES\n");
                      }
                      else{
                          printf("NO\n");
                      }
                  }
                  return 0;
              }
              
              • 0
                @ 2023-9-17 22:01:40
                #include<stdio.h>
                add(long long n)
                {
                long long x=1;
                while(1)
                {
                if(n==x)
                {
                printf("YES\n");
                break;
                }
                x*=2;
                if(n<x)
                {
                printf("NO\n");
                break;
                }
                }
                }
                int main()
                {
                int m;
                scanf("%d",&m);
                for(int i=0;i<m;i++)
                {
                long long d;
                scanf("%lld",&d);
                add(d);
                }
                }
                
                • 1

                信息

                ID
                58
                时间
                1000ms
                内存
                256MiB
                难度
                9
                标签
                (无)
                递交数
                4501
                已通过
                497
                上传者