8 条题解

  • 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: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;
        }
        
        • 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-9-29 9:30:58

            #include<stdio.h> int main() { int m; scanf("%d",&m); int a[m]; for(int i=0;i<m;i++) { scanf("%d",&a[i]); } for(int j=0;j<m;j++) { while(a[j]%2==0) { a[j]=a[j]/2; } if(a[j]==1) { printf("YES"); } else { printf("NO"); } printf("\n"); } return 0; }

            • 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-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
                  标签
                  (无)
                  递交数
                  4641
                  已通过
                  522
                  上传者