2 条题解
-
0
唉,不知道怎么回事,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)
- 1
信息
- ID
- 233
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 471
- 已通过
- 59
- 上传者