算法:判断一个数是不是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 的幂
}
相关推荐
luj_17689 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
mCell10 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
码少女12 小时前
数据结构——哈希表的基础
数据结构·散列表
KaMeidebaby12 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176812 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
tmlx3I08113 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-13 小时前
基础-滑动窗口-(定长 | 不定长)
算法
醉城夜风~13 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
ysa05103013 小时前
【板子】ST表
c++·笔记·算法·板子