算法:判断一个数是不是2的幂

现在有一个数n,这个n是整数。所以要把正整数和负整数考虑在内,现在问这个n是不是2

的幂

现在对n的取值进行讨论,画出二的幂函数,可以看到当n小于等于0时,x无取值,所以小于等于0的n不是2的幂。所以只需要讨论n大于0时的情况即可。下面是三种解决方案

1循环法

cpp 复制代码
bool isPowerOfTwo(int n) {
    if (n <= 0) return false;
    while (n % 2 == 0) n /= 2;
    return n == 1;
}

2位运算

cpp 复制代码
bool isPowerOfTwo(int n) {
    return n > 0 && (n & (n - 1)) == 0;
}

原理:2 的幂的二进制只有一个 1,n & (n-1) 会把最低位的 1 去掉,结果为 0。

3利用int_min

cpp 复制代码
bool isPowerOfTwo(int n) {
    return n > 0 && (1 << 30) % n == 0;  // 2^30 是 int 范围内最大的 2 的幂
}
相关推荐
Dxy12393102165 分钟前
ShardingSphere 自定义分片算法:BINARY(16) UUIDv7 哈希分片实现
算法·哈希算法
罗湖老棍子11 小时前
【例 1】Sightseeing Trip(信息学奥赛一本通- P1494)(洛谷-P10927)
数据结构·算法·图论·最短路·floyd·最小环
stsdddd14 小时前
YOLO算法建筑工地安全帽目标检测数据集16881张:标注核对笔记
算法·yolo·目标检测
CV爱数码14 小时前
论文精读|Learned Primal-Dual:把原始–对偶算法展开成网络
图像处理·算法·计算机视觉·ct·重建·断层扫描
yuniko-n15 小时前
【算法】约瑟夫环问题
java·算法
郝亚军15 小时前
manifest 中 `sha256` 与 `signValue` 的作用
java·开发语言·数据结构
l1t15 小时前
测试DuckDB v2.1.0-alpha49002的bignum乘法
数据库·sql·算法·duckdb
Nil20815 小时前
LeetCode 283移动零
数据结构·算法·leetcode
CQU_JIAKE15 小时前
10.18【A】
算法
LMT流氓兔16 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain