判断一个数是否为 2 的 某 次方
来源:互联网 发布:收看tvb电视软件 编辑:程序博客网 时间:2024/06/05 18:42
在计算机领域,2 有着特殊的地位。
现在给定一个数 n ,检验 n 是否为 2 的某次方。
最简单的方法当然是将 n 不断的 除以 2,如果 n 是 2 的次方,则最后能得到 商为 1。
稍作改良,可以用 移位来代替除以 2 ,因为移位直接在硬件操作,效率比做除法高。
具体代码如下:
public static boolean isPower(int n){if(n < 1)return false;int i = 1;while(i <= n){if(i == n)return true;elsei<<=1;}return false;}
时间复杂度为log n ,算是比较高效的。
但是还有更高效的算法:
充分利用二进制的位运算,如果一个数的二进制数表示只有一位是 1 ,那么这个数是 2 的某次方。
比如 n = 8 的二进制: 0000 1000;n = 16 的二进制 : 0001 0000 ......
那么 n-1 的二进制数的低位都是 1,即 7 的二进制 为 :0000 0111 , 15 的二进制为 : 0000 1111.
可知此时 n 与 n-1 没有一位同时为 1。将 n 与 n-1 做与运算 n&(n-1),结果应当为 0 。具体代码:
public static boolean isPower(int n){if(n < 1)return false;int m = n&(n-1);return m == 0;}
此时时间复杂度为 O(1),比前面的方法高效得多
0 0
- 判断一个数是否为 2 的 某 次方
- 如何判断一个数是否为2的N次方
- 如何判断一个数是否为2的N次方
- 判断一个数是否为2的次方幂
- 如何判断一个数是否为2的N次方
- 判断一个数是否为2的N次方问题
- 判断一个数是否为2的N次方问题
- 判断一个数是否为2的N次方
- 判断一个数是否为2的次方幂
- 如何判断一个数是否为2的幂次方
- 判断一个数是否为2的n次方
- 判断一个数是否为2的n的次方数,六种方法
- 如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方?
- 如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方?
- 判断一个数是否是2的阶次方数
- 使用位运算判断一个数是否为2的N次方
- 位运算判断一个数是否为2的n次方
- 面试题 判断一个数是否为2的n 次方
- SqlServer2012Enterprise…
- Android热修复框架Tinker的集成和遇到的问题
- MTK6573智能机平台系统文件夹文件详解4
- GetModuleFileName
- (二)碎碎念接口优化--fastjson版本兼容问题
- 判断一个数是否为 2 的 某 次方
- Springboot整合Redis
- HTTPS原理
- AS子句作为别名
- MySQL
- Java 二维码生成基础方法和代码
- Matrix Multiplication(zoj 2316)
- 无法删除对象 '产品',因为该对象正由一个 FOREIGN KEY 约束引用
- N皇后问题