2 条题解

  • 0
    @ 2025-9-15 17:25:20

    唉,不知道怎么回事,python老是RE(可能和评测机有关吧)

    本来想用循环套位运算判断的,感觉有点复杂,后来因为每除以 1 个 2 就相当于移位一次,联想到 lowbit(x)(保留到最低位的 1 和 后面的数字)。

    例如 lowbit(180) = 0b100,后有 2 个 0,则个数为 2。

    c++(gnu) 的 __builtin_clz()(针对 int),__builtin_clzll()(针对 long long)统计 32 位 或 64 位 的前导 0 个数,和 python 的.bit_length() 方法经过操作之后,都能用于统计 lowbit 后 0 的数量

    ps.用 循环移位 和 log2 也可计算

    现给出AC c++代码 和 python代码

    c++

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int t, n;
        cin >> t;
        while (t--) {
            cin >> n;
            cout << 31 - __builtin_clz(n & (-n)) << '\n';
        }
        return 0;
    }
    

    python

    for _ in range(int(input())):
        x = int(input())
        print(((x) & (-x)).bit_length() - 1)
    
    • 0
      @ 2024-11-14 17:08:36

      #include <iostream>

      #include <math.h>

      using namespace std;

      void kk(int l){

      while(l--){

      int n;

      cin>>n;

      int i=29;

      int sum=0;

      while(i--){

      double a=pow(2,i);

      if(n%(int)a==0&&n>=a){

      sum+=i;

      break;

      }

      }

      cout<<sum<<endl;

      sum=0;

      }

      }

      int main()

      {

      int t;

      cin>>t;

      kk(t);

      return 0;

      }

      • 1

      信息

      ID
      233
      时间
      2000ms
      内存
      256MiB
      难度
      8
      标签
      (无)
      递交数
      471
      已通过
      59
      上传者